我想知道,如果不是必须用super调用构造函数的话,一个组件怎么可能使用react方法,例如render,componentDidMount等?难道不是组件继承了其Parent类的方法(自从我对其进行扩展以来就是React)并调用super来使用它们? 谢谢!
答案 0 :(得分:1)
关于调用super 所指的问题还不够具体,尽管它可能意味着两个不同的意思。
super()
是指父构造函数调用。仅在子构造函数中才需要。一旦使用子构造函数,它是必需的,这是ES6规范所要求的:
class Parent extends Component {
constructor(props) {
// if no super() is called, it's invalid ES6 class
}
render() {...}
}
但是构造函数本身不是强制性的(所谓的隐式构造函数):
class Parent extends Component {
state = {};
// is a shortcut for:
/*
constructor(props) {
super(props);
this.state = {}
}
*/
render() {...};
}
super.method
引用父类原型上的method
属性。它可以在子构造函数和原型方法中使用。它的使用是可选的。
子类可以完全重写方法,而无需使用各自的super
方法:
class Parent extends Component {
render () { return 'foo'; }
}
class Child extends Parent {
render () { return 'bar'; }
}
或增强其功能:
class AnotherChild extends Parent {
render () { return <h1>{super.render()}</h1>; }
}
答案 1 :(得分:0)
super()
将使用您传递的任何内容填充基类(在您的情况下为React.Component)构造函数。
扩展类将继承属性和方法。
您可以绝对扩展类而不使用其构造函数。因此永远不要调用super()
。
关于super()
并做出反应,如果您正在使用道具,则需要将它们传递给基类。