在React.Component的扩展中使用super的目的是什么?

时间:2016-08-17 23:32:58

标签: javascript reactjs super

为什么你需要在下面的例子中使用super?它实际上从React.Component获取它需要对道具做什么?如果您已经从React.Component扩展了CommentList,那么为什么超级必要 - 不会将传递给构造函数的道具作用,就好像它被传递给React.Component一样? / p>

class CommentList extends React.Component {
  constructor(props) {
    super(props);
    this.state = { comments: [] }
  } ...
}

2 个答案:

答案 0 :(得分:1)

这是一个关于继承的面向对象编程(OOP)概念。

类可以从父类继承方法和属性(在您的情况下,CommentList继承自React.Component [因此关键字extends])

但是,当您为新类命名一个名称相同的方法时,父类的方法会被覆盖。

这个想法也适用于构造函数(它们是在实例化时运行的方法)。

根据OOP的性质,当你在CommentList上声明构造函数时,你覆盖了React.Component的构造函数方法。

因此,你需要调用super()以确保父的构造函数也使用props。 (因此超级(道具))。

答案 1 :(得分:0)

class CommentList extends React.Component {
  constructor(props) {
    console.log(this) // Error
  } 
}
在调用this

之后才会初始化

super()