Heim > Fragen und Antworten > Hauptteil
Ich habe zwei reaktive Pfeilfunktionskomponenten übereinander gestapelt (mit absoluter Positionierung) und beide haben onClick-Eigenschaften. Das Problem ist, ich möchte auf die oberste klicken und beide onClick-Funktionen werden ausgelöst. Gibt es eine Möglichkeit, dieses Problem zu lösen?
Dies ist eine vereinfachte Version des Codes:
const Card = ({...}) => { const styles = { optionsButton: { minWidth:0, minHeight: 0, padding: "2px", position: "absolute", color: "#808080", zIndex: 1, right: 5, top: 5, '&:hover':{ backgroundColor: 'rgb(0, 0, 0, 0.1)' } }, } const [hovering, setHovering] = useState(false) const [isCardExpanded, setIsCardExpanded] = useState(false) const expandCard = () => { setIsCardExpanded(true) } const closeCard = () => { setIsCardExpanded(false) } const mainPaperStyle = () => { let style = { padding: "10px", cursor: "pointer", position: "absolute", "&:hover": { filter: "brightness(97%)" } } //Extra code here modifying color of the style, no positioning modifications return style } const buttonAction = () => { console.log("Do action!") } return( <> <Paper sx={mainPaperStyle()} onClick={expandCard} onMouseEnter={() => setHovering(true)} onMouseLeave={() => setHovering(false)}> Lorem Ipsum {hovering && <Button variant="filled" id="card-button" sx={styles.optionsButton} onClick={() => buttonAction()}> <MoreVertIcon/> </Button> } </Paper> </> ) }
Der Screenshot unten zeigt, warum ich zwei Komponenten zusammenstapeln möchte:
Ich möchte, dass eine Schaltfläche angezeigt wird, wenn die Maus über die Papierkomponente bewegt wird. Das Problem ist, dass jedes Mal, wenn ich auf die Schaltfläche klicke, expandCard
和 buttonAction
ausgelöst wird. (Übrigens verwende ich Material UI)
P粉8313104042024-03-30 10:15:06
您可以使用 $event.stopPropagation();
。
const firstFn = () => { // first function body }; const secondFn = (event: MouseEventHandler) => { $event.stopPropagation(); // second function body }
因此,在您的情况下,您需要将函数 buttonAction
更改为此
const buttonAction = (event) => { $event.stopPropagation(); console.log("Do action!") }
和 return 子句
return( <>setHovering(true)} onMouseLeave={() => setHovering(false)}> Lorem Ipsum {hovering && } > )
您可以在此处了解更多信息