更新到React 16.9.0后,我得到了像这样的大警告:
警告:未来版本的React将会阻止javascript: URL作为安全预防措施。如果可以,请改用事件处理程序。如果需要生成不安全的HTML,请尝试使用dangerouslySetInnerHTML。React被传递了“javascript:;”。
它来自于这样的代码:
const Component = ({someAction}) => (
<a href="javascript:void(0)" onClick={someAction}>click me</a>
);
查看关于在HTML中使用JavaScript链接的“href”值应该使用哪个的StackOverflow问题,似乎大多数人都同意
javascript:void(0)
是最佳选择,但这在React 16.9.0中将不再可用。仅仅替换为
href="#"
是有问题的,因为浏览器会滚动到页面顶部并更改显示的URL。特别是如果您使用哈希链接进行路由,则非常有问题。我可以更新我的整个代码库以在每个事件处理程序中添加
e.preventDefault();
,但这似乎很难做到,特别是当事件处理程序是从Redux操作创建器或挂钩自动生成时。我不想要答案“只需在每个地方包含e.preventDefault();
”!此外,使用
<button>
意味着我必须处理许多不需要的应用样式。所以我想知道:是否有任何与库React相关的解决方案,以获得一个工作的
<a>
链接,只触发没有副作用的操作?我希望尽可能少地更改代码并摆脱弃用警告。
div
,但那需要一些辅助功能调整。 - Emile Bergeron