suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Klicken Sie auf Ereignis für gestapelte Komponente

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

P粉882357979P粉882357979243 Tage vor361

Antworte allen(1)Ich werde antworten

  • P粉831310404

    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 &&
                        
                    }
                
            
        )

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

    Antwort
    0
  • StornierenAntwort