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 显示定义适用情景
- 初始化当前组件内部state。
- 事件处理方法绑定实例 this。
constructor里需要注意
- 在 constructor() 函数中不要调用 setState() 方法;
2)避免将 props 的值复制给 state!避免派生状态的文章参考避免派生状态
super(props)
super关键字,它在这里表示父类的构造函数,用来新建父类的this对象。
子类必须在constructor方法中调用super方法,否则新建实例时会报错。这是因为子类自己的this对象,必须先通过父类的构造函数完成塑造,得到与父类同样的实例属性和方法,然后再对其进行加工,加上子类自己的实例属性和方法。如果不调用super方法,子类就得不到this对象。
这是基于ES6 的继承机制(先将父类实例对象的属性和方法,加到this上面(所以必须先调用super方法),然后再用子类的构造函数修改this)。
注意
- 构造函数constructor中,只有调用super之后,才可以使用this关键字,否则会报错。