- React 事件的命名采用小驼峰式(camelCase),而不是纯小写
- 使用 JSX 语法时你需要传入一个函数作为事件处理函数,而不是一个字符串。
- 不能通过返回 false 的方式阻止默认行为。你必须显式的使用 preventDefault
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17constructor(props) {
super(props);
this.handleClick = this.handleClick.bind(this);
}
render() {
return (
<div>
<a href="#" onClick={this.handleClick}>
a标签
</a>
</div>
);
}
handleClick(e) {
e.preventDefault();
}
无传参情况
在constructor中手动绑定this,如上代码。
使用实验性的 public class fields 语法
1
2
3
4
5<div onClick={this.publicFieldsHandle}>publicFieldsHandle</div>
publicFieldsHandle = () => {
console.log(this)
}回调中使用箭头函数
每次渲染组件时都会创建不同的回调函数。在大多数情况下,这没什么问题,但如果该回调函数作为 prop 传入子组件时,这些组件可能会进行额外的重新渲染。1
2
3
4
5<div onClick={e => {this.arrowHandle()}}>arrow callback</div>
arrowHandle() {
console.log(this);
}
通常在构造器中绑定或使用 class fields 语法来避免这类性能问题。
传参情况
1 | <button onClick={(e) => this.deleteRow(id, e)}>Delete Row</button> |
React 的事件对象 e 会被作为第二个参数传递。如果通过箭头函数的方式,事件对象必须显式的进行传递,而通过 bind 的方式,事件对象以及更多的参数将会被隐式的进行传递。