Klicken Sie auf Ereignis für gestapelte Komponente
P粉882357979
P粉882357979 2024-03-29 17:29:41
0
1
380

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:

  • Vor dem Schweben:
  • Nach dem Schweben:

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, expandCardbuttonAction ausgelöst wird. (Übrigens verwende ich Material UI)

P粉882357979
P粉882357979

Antworte allen(1)
P粉831310404

您可以使用 $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 &&
                    
                }
            
        >
    )

您可以在此处了解更多信息

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage