- React事件绑定属性的命名采用驼峰写法,不一样于传统DOM所有小写。
- 若是采用JSX的语法,事件函数须要用大括号
{}
包裹函数名,不一样于传统DOM字符串小括号的方式。
<button onClick={ activateLasers }> Activate Lasers </button>
- 在React中另外一个不一样是你不能使用返回
false
的方式阻止默认行为,必须明确使用preventDefault
来阻止。
function handleClick() { e.preventDefault(); console.log('The link was clicked.'); } return ( <a href="#" onClick={ handleClick }> CLICK ME </a> );
React一般在元素初始渲染的时候提供一个事件,而后绑定给元素便可:react
class Toggle extends React.Component { constructor(props) { super(props); this.state = { isToggleOn: true }; this.handleClick = this.handleClick.bind(this); } handleClick() { this.setState(prevState => ({ isToggleOn: !prevState.isToggleOn })); } render() { return ( <button onClick={ this.handleClick }> { this.state.isToggleOn ? 'ON' : 'OFF' } </button> ); } } ReactDOM.render( <Toggle />, document.querySelector('#root') );
注意这里使用了bind
方法来指向this
为当前类的实例。若是不想使用bind
能够使用【属性初始化器】来解决。函数
class Toggle extends React.Component { constructor(props) { super(props); this.state = { isToggleOn: true }; // this.handleClick = this.handleClick.bind(this); } // 这里使用了箭头函数 // React文档称为【属性初始化器】 // React文档推荐使用这两种方式 handleClick = () => { this.setState(prevState => ({ isToggleOn: !prevState.isToggleOn })); } render() { ... } } ReactDOM.render( <Toggle />, document.querySelector('#root') );
还能够在回调函数中使用箭头函数(这样作可能有性能问题):性能
若是这个回调函数做为一个属性值传入低阶组件,这些组件可能会进行额外的从新渲染。学习
class Toggle extends React.Component { constructor(props) { ... } handleClick() { ... } render() { // 这里使用了箭头函数 return ( <button onClick={ e => this.handleClick(e) }> { this.state.isToggleOn ? 'ON' : 'OFF' } </button> ); } } ReactDOM.render( <Toggle />, document.querySelector('#root') );
两种方式:this
<button onClick={ e => this.deleteRow(id, e) }>Delete Row</button>
<button onClick={ this.deleteRow.bind(this, id) }>Delete Row</button>
经过箭头函数传递的参数就是方法被调用写得顺序入参。
而bind方法传递的参数,总体排在e
事件对象前面:google
class Popper extends React.Component { constructor() { super(); this.state = { name: 'Hello world!', id: '001' }; } preventPop(id, name, e) { e.preventDefault(); alert(id + ': ' + name); } render() { return ( <div> <p>Pass Params</p> { /* Pass params via bind() method. */ } <a href="https://google.com" onClick={ this.preventPop.bind(this, this.state.id, this.state.name) }>Click Me</a> </div> ); } } ReactDOM.render( <Popper />, document.querySelector('#root') );
运行效果:code
The end... Last updated by: Jehorn, April 15, 2019, 6:30 PM对象