简体   繁体   English

如何使用 React onClick 防止 href 触发?

[英]How can I prevent href from firing using React onClick?

trying to make a link element ( <a> element) with href .尝试使用href制作链接元素( <a>元素)。 Why am I using href and not changing history ?为什么我使用href而不是更改history because I want the option to open in a new tab in browser.因为我想要在浏览器的新标签页中打开的选项。

The Problem is, I have a button inside the element, and when you click on it, it triggers the href immediately, before even getting to stopProppagation or preventDefault inside the onClick handler of the button.问题是,我在元素中有一个按钮,当你点击它时,它会立即触发href ,甚至在按钮的onClick处理程序中停止stopProppagationpreventDefault之前。 It's like 2 different event types…这就像 2 种不同的事件类型……

something like this:像这样:

...
const onButtonClick = (event) => {
    event.stopPropagation();
    event.nativeEvent.stopImmediatePropagation();
    event.preventDefault();
    if (clickDisabled) return;
    if (!onClick) return;
    onClick(event);
}

return (
    <a href={someHref}>
        <button onClick={onButtonClick}>open menu</button>
    </a>
)

Any ideas?有任何想法吗?

The workaround I ended up using: instead of the button onClick - I used onMouseDown which happens before the href trigger.我最终使用的解决方法是:而不是按钮onClick - 我使用了onMouseDown ,它发生在href触发器之前。 Not the best solution, but was good enough in my case.不是最好的解决方案,但对我来说已经足够了。

const onButtonClick = (event) => {
    event.stopPropagation();
    event.nativeEvent.stopImmediatePropagation();
    if (clickDisabled) return;
    if (!onClick) return;
    onClick(event);
}


const handleLink = (e) => {
    e.preventDefault();
    window.open('https://URL...', '_blank');
  }

   return (
    <a href={someHref} onClick={handleLink}>
        <button onClick={onButtonClick}>open menu</button>
    </a>
)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM