React事件摘录

JSX 中之内联(inline)的方式

<button onClick={this.increase}>+</button>

合成事件 SyntheticEvent

React 实现了一个“合成事件”层(synthetic event system),这个事件模型保证了和 W3C 标准保持一致,因此不用担忧有什么诡异的用法,而且这个事件层消除了 IE 与 W3C 标准实现之间的兼容问题。
“合成事件”还提供了额外的好处:promise

事件委托

“合成事件”会以事件委托(event delegation)的方式绑定到组件最上层,而且在组件卸载(unmount)的时候自动销毁绑定的事件。浏览器

什么是“原生事件”?

好比你在 componentDidMount 方法里面经过 addEventListener 绑定的事件就是浏览器原生事件。
使用原生事件的时候注意在 componentWillUnmount 解除绑定 removeEventListener。
全部经过 JSX 这种方式绑定的事件都是绑定到“合成事件”,除非你有特别的理由,建议老是用 React 的方式处理事件。函数

若是混用“合成事件”和“原生事件”,好比一种常见的场景是用原生事件在 document 上绑定,而后在组件里面绑定的合成事件想要经过 e.stopPropagation() 来阻止事件冒泡到 document,这时候是行不通的,参见 Event delegation,由于 e.stopPropagation 是内部“合成事件” 层面的,解决方法是要用 e.nativeEvent.stopImmediatePropagation()
”合成事件“ 的 event 对象只在当前 event loop 有效,好比你想在事件里面调用一个 promise,在 resolve 以后去拿 event 对象会拿不到(而且没有错误抛出):oop

handleClick(e) {
  promise.then(() => doSomethingWith(e));
}

参数传递

给事件处理函数传递额外参数的方式:bind(this, arg1, arg2, ...)this

render: function() {
    return <p onClick={this.handleClick.bind(this, 'extra param')}>;
},
handleClick: function(param, event) {
    // handle click
}
相关文章
相关标签/搜索