React.js:不能再"返回false"......是否有等价物?

mac*_*ost 6 events reactjs

题:

在一个做出反应的事件处理程序,有没有方便的方式e.preventeDefault,并e.stopPropagation同时(你曾经是能够与方式return false)?

背景: React已经开始弃用以下内容:

return false;
Run Code Online (Sandbox Code Playgroud)

内部事件处理程序作为实现的一种手段:

e.preventDefault();
e.stopPropagation();
Run Code Online (Sandbox Code Playgroud)

这个GitHub问题解释了React团队正在尝试return false顺便解决事件回调问题(即没有意图阻止默认/停止传播).

这很有道理,我理解它背后的逻辑,但......

e.preventDefault();
e.stopPropagation();
Run Code Online (Sandbox Code Playgroud)

比起来更难以记忆和写作return false.

所以,我的问题是:有没有方便的方法来获取return falseReact事件处理程序内的功能?例如,是否有某种e.stopBoth()方法,或return React.PREVENT常量,或任何其他方式来获得旧return false功能?

或者,如果没有,有没有办法猴子补丁这样的功能?

Col*_*say 10

没有一种确定的方法可以做到这一点,仅仅因为它不是React团队似乎想要鼓励的行为.有人猜测来自处理程序的返回值可能会在未来以其他方式使用,但这对我来说听起来很麻烦且反直觉.

无论如何,我们可以:

a)深入研究这些SyntheticEvent东西,但是重写/扩充React内部听起来像是一个非常糟糕的主意.SyntheticEvent让React规范化事件处理.

b)为此创建一个简单的辅助函数(hattip @octref):

// In some killEvent.js
module.exports = function(event) {
    e.preventDefault();
    e.stopPropagation();
}


// In some component file
var killEvent = require('./killEvent');

var Component = React.createClass({
    ... component implementation

    myEventHandler = function(e) {
        killEvent(e);
    }
});
Run Code Online (Sandbox Code Playgroud)

确切的实现取决于您正在使用的模块系统,但希望您能得到这个想法.我认为这是最好的方法,因为它非常简单,易于操作,并且表达了你想要做的非常清楚的事情.