React事件
React事件
React事件处理React通过将事件处理器绑定到组件上来处理事件。在事件被触发的同时,更新组件的内部状态。组件内部状态的更新会触发组件重绘。 React处理事件本质上和原生Javascript事件一样、所有的事件都进行了重新封装,事件在命名上与原生Javascript规范一致,并且会在相同的场景下触发。 React合成事件
React支持事件鼠标事件onClick onContextMenu onDoubleClick onDrag onDragEnd onDragEnter onDragExitonDragLeave onDragOver onDragStart onDrop onMouseEnter onMouseLeave onMouseDown onMouseMove onMouseUp onMouSEOver onMouSEOut 键盘事件onKeyDown onKeyPress onKeyUp 表单事件onChange onInput onSubmi 焦点事件onFocus onBlur 触控事件onTouchCancel onTouchEnd onTouchMove onTouchStart 剪贴板事件onCopy onCut onPaste 事件中的this指向在React组件中,每个方法的上下文都会指向该组件的实例,即自动绑定this为当前组件。而且React还对这种引用进行缓存,已达到CPU和内存的最优化。在使用ES6 class 或者纯函数时,这种自动绑定就不复存在了,我们需要手动实现this的绑定。 class Counter extends Component{ constructor(props){ super(props); this.state = { value:0 } } increment(){ //this == window 不是我们认为组件的实例 this.setState({ value:this.state.value+1 }) } render(){ return (<div> <button onClick={this.increment}>+</button> <div className="text">{this.state.value}</div> <button onClick={this.decrement}>-</button> </div>) } } ? bind方法这个方法可以帮助我们绑定事件处理器内的this,并可以向事件处理器中传递参数,比如: 构造函数内声明在组件的构造函数内完成了this的绑定,这种绑定方式的好处在于仅需要进行一次绑定,而不需要每次调用事件监听函数时区执行绑定操作: 箭头函数箭头函数不仅是函数的语法糖,它还自动绑定了定义此函数作用域的this,因此我们不需要再对它使用bind方法。 在React中使用原生事件React提供了很好的合成事件系统,但是这并不意味着在React架构下无法使用原生事件。React提供了完备的生命周期方法,其中componentDidMount会在组件已经完成安装并且在浏览器中存在真实的DOM后调用,此时我们就可以完成原生事件的绑定。 对比React合成事件与Javascript原生事件
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |