constructor里面为什么必须写super(props)

class Son extends Fa {
    
    
  constructor(props) {
    
    
    super(props); // 调用父类的constructor(),必须放在前面
    this.attr1 = attr1;//必须放在super(props)之后,否则报错
  }
  this.handleClick = this.handleClick.bind(this)
}

了解constructor

ES6中每个类的构造函数,创造一个组件实例,用来做一些组件的初始化工作。
如果不初始化 state 或不进行方法绑定,则不需要为 React 组件实现构造函数,会有一个默认的构造函数。
但是若显式定义了构造函数,我们必须在构造函数中执行 super(props),否则无法在构造函数中拿到 this。

constructor 显示定义适用情景
  1. 初始化当前组件内部state。
  2. 事件处理方法绑定实例 this。
constructor里需要注意
  1. 在 constructor() 函数中不要调用 setState() 方法;
    2)避免将 props 的值复制给 state!避免派生状态的文章参考避免派生状态

super(props)

super关键字,它在这里表示父类的构造函数,用来新建父类的this对象。
子类必须在constructor方法中调用super方法,否则新建实例时会报错。这是因为子类自己的this对象,必须先通过父类的构造函数完成塑造,得到与父类同样的实例属性和方法,然后再对其进行加工,加上子类自己的实例属性和方法。如果不调用super方法,子类就得不到this对象。

这是基于ES6 的继承机制(先将父类实例对象的属性和方法,加到this上面(所以必须先调用super方法),然后再用子类的构造函数修改this)。

注意
  1. 构造函数constructor中,只有调用super之后,才可以使用this关键字,否则会报错。

猜你喜欢

转载自blog.csdn.net/m0_38073011/article/details/115006378