我有兩個相互堆疊的反應箭頭函數元件(使用絕對定位),而且它們都有 onClick 屬性。問題是,我想點擊頂部的那個,並且兩個 onClick 函數都會觸發。有辦法解決這個問題嗎?
這是程式碼的簡化版本:
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> </> ) }
下面的螢幕截圖說明了為什麼我希望將兩個元件堆疊在一起:
我希望當滑鼠懸停在 Paper 元件頂部時出現一個按鈕。問題是,當我單擊按鈕時, expandCard
和 buttonAction
都會觸發。 (順便說一句,我正在使用 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 && } > )
您可以在此處了解更多