类组件事件绑定

  1. class MyComponent extends React.Component {
  2. addN = () => this.setState({n: this.state.n + 1});
  3. render() {
  4. return <button onClick={this.addN}> n+1</button>
  5. }
  6. }

函数在对象上

函数定义在 constructor 中,创建实例时出现在实例自身上
函数里的 this 永远指向实例
一般使用这种写法

  1. class MyComponent extends React.Component {
  2. constructor() {
  3. super();
  4. this.state = {n: 0};
  5. this.addN2 = () => this.setState({n: this.state.n + 1}); // 两种写法等价
  6. }
  7. addN1 = () => this.setState({n: this.state.n + 1}); // 两种写法等价
  8. }

函数在原型上

函数在原型上(obj.prototype),与 Java 里的静态属性一样,所有实例共用同一个函数,创建实例时出现在实例的 __proto__
函数里的 this 可能变成 window

  1. class MyComponent extends React.Component {
  2. addN1() {
  3. this.setState({n: this.state.n + 1})
  4. }
  5. addN2: function() {
  6. this.setState({n: this.state.n + 1})
  7. }
  8. }