为什么React类组件的构造函数中总是需要调用super(props)?

11
在reactjs.org发布的教程中,指出“类组件应始终使用props调用基础构造函数”。根据这个StackOverflow答案,如果在构造函数中未使用this.props,则super(props)可以被super()替换。
因此,我的问题是,在reactjs中为什么我们总是要传递props到基本构造函数中?这个建议是否正确?为什么这个建议是正确的(或不正确的)?
附注:在回答这个问题时,如果原始教程被更新,我已经上传了截图。

reactjs tutorial


1
除了React之外,您应该始终使用父构造函数所期望的参数来调用它。您不能假设不调用父构造函数会没问题。 - Felix Kling
嗯,我认为我的问题在于 props 部分,而不是 super() 部分。然而,我对关于 super() 部分的答案获得了很多知识,感到非常惊讶。 - Lil E
5个回答

7
尽管建议将props传递给super,但这并非绝对必要。
只是在一种奇怪的情况下会有所帮助:你可能已经在构造函数中调用了一个方法,然后在未来的某个时间点决定在其中使用props。由于props在构造函数中不可用,因为你没有将props传递给super,这将导致错误。这种情况可能很难调试,因此建议每次编写构造函数时都传递props,以确保在构造函数退出之前设置了this.props

2
值得一提的是,super构造函数实际上做了什么 - 它设置了this.propsthis.context和一些内部数据结构。 - Birjolaxew

1

在JavaScript中,super指的是父类构造函数。

为什么我们要调用super?我们不能不调用它吗?如果我们必须调用它,如果我们不传递props会发生什么?还有其他参数吗?

阅读下面链接的文章以获取上述问题的答案。

阅读React JS团队成员Dan Abramov的文章


0

这是因为您正在初始化父组件 React.Component,例如 this.props 将未定义。您可以在 react 工程师 Dan Abramov 的 博客 中找到详细的解释,了解我们为什么使用它。


0
简单来说,它用于调用父类构造函数,这是非常必要的。当调用 super() 时,它实际上调用了父类构造函数,在ES类构造函数中,当其为子类时必须有super(),而且只有在显式声明构造函数时才需要super()

Super() 不是必需的。

class TestApp extends React.component{
   render(){
      return <div>I don't need a super()</div>
   }
}

需要使用Super()函数

class TestApp extends React.component{
   constructor(){
     super(); // here super is required becuase it calls the parent class constructor //
   }

   render(){
      return <div>I don't need a super()</div>
   }
}

使用 super(),你也可以将 props super(props) 传递给父类,在这种情况下,props 将通过 this.props 在组件之间访问。


-1

这不是必须的非常必要吗?

因为类 Clock 继承于 React.Component,所以你可以访问 React.Component 的所有属性和方法。

通过调用 super,实际上是带有 props 参数调用父元素

如果你想在 constructor 中使用 this.props,则必须调用 super(props)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接