React-为什么不调用super就能使用React的方法?

时间:2019-01-21 13:35:25

标签: reactjs ecmascript-6

我想知道,如果不是必须用super调用构造函数的话,一个组件怎么可能使用react方法,例如render,componentDidMount等?难道不是组件继承了其Parent类的方法(自从我对其进行扩展以来就是React)并调用super来使用它们? 谢谢!

2 个答案:

答案 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()并做出反应,如果您正在使用道具,则需要将它们传递给基类。