提问人:Hi - P 提问时间:9/18/2023 更新时间:9/20/2023 访问量:58
在 React 中单击卡片图标时阻止链接激活
Prevent Link from activating on click on card icon in React
问:
我有一张卡片,包裹在 .里面是卡片的 div,div 是相对定位的。在卡片 div 内部是一个绝对位于卡片上的图标,单击该图标时应该会改变背景颜色。现在的问题是,单击图标也会单击我不想要的图标。我尝试使用,但它也会阻止所有后续事件再次正确触发,因为我希望能够在单击图标时随时翻转图标的背景颜色。我试过了,但它们似乎不起作用。Link
react-router-dom@v5
Link
Link
e.preventDefault()
e.stopPropagation()
e.nativeEvent.stopImmediatePropagation
我也经历了几个 SO 答案,但似乎没有一个能解决我的问题。
function handleFavClick(event) {
event.stopPropagation();
console.log(event);
}
<Link to={`/movies/${movie.id}`} key={movie.id}>
<div
className="card"
key={movie.id}
>
<img
src="/heart-icon.png"
alt="heart icon"
onClick={handleFavClick}
/>
<img
src="/card-image.png"
alt="original card image"
/>
</div>
</Link>
可能是什么问题?
答:
0赞
Onoriode
9/18/2023
#1
Event.preventDefault()
在提交表单时起作用,以防止页面重新加载。
除此之外,不要点击链接标签,您应该从链接标签中删除img标签。react-router-dom
import { Link } from "react-router-dom"
const onClickFunction = () =>{
const handleFavClick = (event) =>{
event.preventDefault()
console.log(event);
}
return (
<>
<Link to={`/movies/${movie.id}`} key={movie.id}>
<div className="card" key={movie.id}>
<img src="/card-image.png" alt="original card image"/>
</div>
</Link>
<img src="/heart-icon.png" alt="heart icon" onClick={handleFavClick}/>
</>
);
}
export default onClickFunction;
评论
0赞
Hi - P
9/18/2023
谢谢。我也试过了。它工作不正确。当我单击该图标时,它会发生变化,不会触发任何其他内容。如果我再次单击它以翻转背景颜色,它不会检测到单击,直到我单击图标中的外部区域。e.preventDefault()
0赞
Hi - P
9/18/2023
我已经尝试了你的建议。将图标从卡片中取出有点工作,并停止点击卡片。图标从文档中取出,因为我想将图标放在卡片上,就像在设计中一样。
0赞
Nikhil Prajapati
9/18/2023
#2
为了防止在单击心形图标时触发 ,同时仍然允许函数执行,您可以用 包装 并将事件处理程序放在该 上。这样,单击心形图标不会触发 .下面是代码的更新版本:Link
handleFavClick
Link
div
onClick
div
Link
<div onClick={() => handleFavClick(movie.id)}>
<Link to={`/movies/${movie.id}`} key={movie.id}>
<div className="card" key={movie.id}>
<img src="/heart-icon.png" alt="heart icon" />
<img src="/card-image.png" alt="original card image" />
</div>
</Link>
</div>
0赞
Hi - P
9/19/2023
#3
终于弄清楚了问题所在。这是因为,在我的 CSS 中,我使用了悬停和焦点样式,即使在单击切换收藏夹图标的背景颜色后,该样式仍在反映。
评论
Link