# 事件处理
React 元素的事件处理和 DOM 元素的很相似,但是有一点语法上的不同:
- React 事件的命名采用小驼峰式(camelCase),而不是纯小写。
- 使用 JSX 语法时你需要传入一个函数作为事件处理函数,而不是一个字符串
// html
<button onclick="activateLasers()">
Activate Lasers
</button>
// jsx
<button onClick={activateLasers}>
Activate Lasers
</button>
# 一个例子
import React from "react";
class Toggle extends React.Component {
constructor(props) {
super(props);
this.state = { isToggleOn: true };
}
handleClick() {
this.setState((prevState) => ({
isToggleOn: !prevState.isToggleOn,
}));
}
render() {
// 此语法确保 `handleClick` 内的 `this` 已被绑定。
return <button onClick={() => this.handleClick() }>{this.state.isToggleOn ? "ON" : "OFF"}</button>;
}
}
export default Toggle;
import Toggle from "./components/Toggle";
const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(<Toggle/>);
# 向事件处理程序传递参数
在循环中,通常我们会为事件处理函数传递额外的参数。例如,若 id 是你要删除那一行的 ID,以下两种方式都可以向事件处理函数传递参数:
<button onClick={(e) => this.deleteRow(id, e)}>Delete Row</button>
<button onClick={this.deleteRow.bind(this, id)}>Delete Row</button>
上述两种方式是等价的,分别通过箭头函数和 Function.prototype.bind 来实现。