React元素的时间处理和DOM元素的很类似。可是有一点语法上的不一样;javascript
例如,传统的HTML:html
<button onclick="activateLasers()"> Activate Lasers </button>
React中稍有不一样:java
<button onClick={事件处理函数}> Activate Lasers </button>
在React中另一个不一样是你不能使用返回false
的方式组织默认行为。你必须明确使用preventDefault
。例如,传统的HTML中阻止连接默认打开一个新页面,你能够这样写:react
<a href="#" onclick="console.log('The link was clicked.'); return false"> Click me </a>
而在React中,应该这样写:浏览器
function ActionLink(){ function handleClick(e){ e.preventDefault(); console.log(11111) } return( <a href="#" onClick={handleClick}> Click me <a/> ) }
在这里,e
是一个合成事件。React 根据 W3C spec 来定义这些合成事件,因此你不须要担忧跨浏览器的兼容性问题。查看 SyntheticEvent 参考指南来了解更多。函数
使用 React 的时候一般你不须要使用 addEventListener
为一个已建立的 DOM 元素添加监听器。你仅仅须要在这个元素初始渲染的时候提供一个监听器。this
当你使用 ES6 class 语法来定义一个组件的时候,事件处理器会成为类的一个方法。例如,下面的 Toggle
组件渲染一个让用户切换开关状态的按钮:prototype
class Toggle extends React.Component{ constructor(props){ super(props); this.handelClick= this.handelClick.bind(this); } handelClick(){ this.setState(prevState=>({ isToggleOn:!prevState.isToggleOn })) } render(){ return( <button onClick={this.handleClick}> {this.state.isToggleOn? 'ON':'OFF'} </button> ) } } ReactDOM.render( <Toggle />, document.getElementById('root') );
你必须谨慎对待JSX回调函数中的this
,类的方法默认是不会绑定this
的。若是你忘记绑定this.handleClick
并把它传入onClick
,当你调用这个函数的时候,this
的值会是unde
.code
这并非 React 的特殊行为;它是函数如何在 JavaScript 中运行的一部分。一般状况下,若是你没有在方法后面添加 ()
,例如 onClick={this.handleClick}
,你应该为这个方法绑定 this
。htm