我想在 Link 中制作一个可点击的元素,而不是像 link
I want to make a clickable element inside a Link without it behaving like a link
我有一个组件完全 link 在 <Link>
标签中编辑,但我有一个图标,我希望在不激活 link 的情况下单击它。有没有办法转义图标?
<Link to={`/post/${id}`} className='flex flex-row px-3 py-2'>
<div>Some content</div>
<i onClick={anAction}>An Icon</i>
<div>Some content</div>
</Link>
你应该使用e.preventDefault()
<Link to={`/post/${id}`} className='flex flex-row px-3 py-2'>
<div>Some content</div>
<i onClick={(e) => {e.preventDefault(); //rest of your function}}>An Icon</i>
<div>Some content</div>
</Link>
通常,您应该避免在其他交互元素内部呈现交互元素。如果您只想单独单击图标而不激活 link,但 link 中的其他任何地方都应该激活它,则阻止图标中的单击事件传播并允许默认 link 动作发生。
示例:
const anAction = e => {
e.preventDefault();
e.stopPropagation();
...
};
...
<Link to={`/post/${id}`} className='flex flex-row px-3 py-2'>
<div>Some content</div>
<i onClick={anAction}>An Icon</i>
<div>Some content</div>
</Link>
这是停止默认行为的组件示例,但我强烈反对总体上执行此类操作。如果可能的话,我宁愿只包装可以在 <Link>
中单击的内容(在您的用例中没问题)。
import { Link } from "react-router-dom";
const Test = () => {
const handleOnClick = (e) => {
e.preventDefault();
console.log("hello");
// ...rest
};
return (
<Link to={"/another-page"}>
Some text
<i onClick={handleOnClick}>Hello</i>
</Link>
);
};
export default Test;
我有一个组件完全 link 在 <Link>
标签中编辑,但我有一个图标,我希望在不激活 link 的情况下单击它。有没有办法转义图标?
<Link to={`/post/${id}`} className='flex flex-row px-3 py-2'>
<div>Some content</div>
<i onClick={anAction}>An Icon</i>
<div>Some content</div>
</Link>
你应该使用e.preventDefault()
<Link to={`/post/${id}`} className='flex flex-row px-3 py-2'>
<div>Some content</div>
<i onClick={(e) => {e.preventDefault(); //rest of your function}}>An Icon</i>
<div>Some content</div>
</Link>
通常,您应该避免在其他交互元素内部呈现交互元素。如果您只想单独单击图标而不激活 link,但 link 中的其他任何地方都应该激活它,则阻止图标中的单击事件传播并允许默认 link 动作发生。
示例:
const anAction = e => {
e.preventDefault();
e.stopPropagation();
...
};
...
<Link to={`/post/${id}`} className='flex flex-row px-3 py-2'>
<div>Some content</div>
<i onClick={anAction}>An Icon</i>
<div>Some content</div>
</Link>
这是停止默认行为的组件示例,但我强烈反对总体上执行此类操作。如果可能的话,我宁愿只包装可以在 <Link>
中单击的内容(在您的用例中没问题)。
import { Link } from "react-router-dom";
const Test = () => {
const handleOnClick = (e) => {
e.preventDefault();
console.log("hello");
// ...rest
};
return (
<Link to={"/another-page"}>
Some text
<i onClick={handleOnClick}>Hello</i>
</Link>
);
};
export default Test;