我今天开始学习Reactjs并发现一个有趣的事实(并且没有找到任何相关主题)我们必须使用preventDefault
而不是使用return false
语句来防止默认行为:{{ 3}}
但据我所知,return false等同于(来自jQuery背景):
// e.preventDefault();
// e.stopPropagation();
// stop function execution after return false
// stops the callback function
但我很想知道反应是如何实现的,这样我们就无法使用return false
语句,我们必须使用preventDefault
来防止默认行为。
那么,当遇到reactjs时,preventDefault
和return false
之间究竟有什么区别?为什么preventDefault
比reactjs中的return false
更强大?
答案 0 :(得分:1)
反应中的事件不是浏览器的本机事件,它们是为方便起见而包装的。
您的事件处理程序将传递SyntheticEvent的实例,a 围绕浏览器的本机事件的跨浏览器包装器。它有 与浏览器的本机事件相同的界面,包括 stopPropagation()和preventDefault(),但事件工作除外 所有浏览器都相同。
https://reactjs.org/docs/events.html
因此,当你执行preventDefault时,你不是直接调用本机事件的方法,而是反应照顾你。
因此返回false会返回false以响应事件而不是本机事件,这意味着,它并没有真正做任何事情......
答案 1 :(得分:1)
实际上使用来自事件处理程序的 return false
来防止自 React 0.12 以来的默认行为 has been deprecated。
因此,这不是最可靠的选择,您不能在 return false
中为此目的使用 React
。
您必须显式调用事件 preventDefault
,as explained in the documentation。
答案 2 :(得分:0)
当您在DOM中调用return false
时,它会有一些"魔法"隐含而非显性的行为。当您在React中注册事件回调时,您不在DOM中显式设置事件处理程序,因为React是DOM的抽象。 React元素是虚拟DOM的一部分"并且您不再直接使用DOM,因此事件处理程序在组件处理程序和DOM元素本身之间具有抽象层。
React能否以return false;
镜像此隐式行为的方式实现其API?也许。但他们有自己的API,显然没有选择。
以下是return false
时DOM如何处理事情的good overview。