对于reactjs,preventDefault vs返回false

时间:2018-04-16 11:43:48

标签: javascript reactjs

我今天开始学习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时,preventDefaultreturn false之间究竟有什么区别?为什么preventDefault比reactjs中的return false更强大?

3 个答案:

答案 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

您必须显式调用事件 preventDefaultas 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