事件
React的事件与html
dom
的事件类似,有以下两点不同:
命名
React 事件采用驼峰式的命名,例如:
<div onClick={/* */}></div>
语法
React 事件实现方式是jsx,并不是
html
dom
的字符串。例如:<div onClick={() => console.log('clicked me')}></div>
this
的绑定
在React class
中,默认不会将this
绑定到方法中,所以需要手动绑定this
到函数中,否则函数中是无法使用this
的。
bind
我们将定义好的函数在
construtor
中通过bind
方法绑定。示例:class extend React.Component { constructor(props) { super(props); this.state = {color: 'red'}; this.myClick = this.myClick.bind(this); } render() { return ( <div onClick={this.myClick}></div> ) } myClick() { console.log(this.state.color); } }
箭头函数
直接使用箭头函数。示例:
class extend React.Component { constructor(props) { super(props); this.state = {color: 'red'}; } render() { return ( <div onClick={() => this.myClick()}></div> ) } myClick() { console.log(this.state.color); } }
事件参数
示例:
<button onClick={(e) => this.myClick(id, e)}>Delete Row</button>
<button onClick={this.myClick.bind(this, id)}>Delete Row</button>
合成事件
React中的事件都是合成事件,不是原生的事件。
合成事件是一个事件池,这样可以复用事件。
合成事件是通过冒泡的方式注册到document
上的。
合成事件支持所有原生事件,使用时用驼峰命名就可以了。
合成事件与原生事件的实例:
class extends React.Component {
componentDidMount() {
document.querySelector(".button").addEventListener("click", () => {
this.onDomClick();
});
}
onDomClick() {
console.log("Javascript Dom click");
}
onReactClick() {
console.log("React click");
}
render() {
return (
<div>
<button className="button" onClick={() => this.onReactClick()}>
点击
</button>
</div>
);
}
}
结果:
Javascript Dom click
React click
如果不想使用合成事件,可以通过
event.persist()
方法实现。