为什么我必须将道具传递给构造函数和Super

时间:2018-10-11 09:55:59

标签: reactjs ecmascript-6 es6-class

有人可以告诉我为什么我们需要将props传递给Constructor()和super()。我已经阅读了很多与此有关的问题,也阅读了许多文章。所有人都说您应该将prop传递给构造函数和super,以便您可以访问this.props .....

如果我不将props传递给构造函数或super,我的所有代码仍然可以使用。而且我看不到任何情况都会改变。除非我想控制台记录this.props,否则可以通过控制台记录this来实现。

另外,与我交谈过的开发人员中有一半确实通过了道具,而另一半则没有通过,因为他们觉得自己不需要,但是还不确定为什么会发生这种情况。

请问有人可以帮我一下吗?

谢谢

1 个答案:

答案 0 :(得分:0)

某人需要通过props的唯一原因是如果您想在constructor中对他们做某事。也许您想对构造函数中的props进行一些计算-即使您在没有构造函数的情况下也可以访问props,我不确定您是否可以在构造函数之外执行该操作。

documentation给出了使用构造函数中的props分配初始状态的示例。对于具有局部状态的组件,这是将prop传递给构造函数的好用例。

此外,this这样的答案为您解释了为什么需要在ES6中将道具传递给super的原因。

但是,由于props和{的类属性,您无法将constructor传递给state并初始化没有它的本地状态,因此可以忽略很多{1}}。查阅this的Hacker Noon文章,了解构造函数及其替代方法的一些“用例”。需要指出的一件事是,作者提到Babel为您添加了转译代码以添加构造函数-您只是看不到它。最终,我想如果要删除构造函数,可以按照preference的方法进行,正如Dave Ceddia所指出的那样。但是,删除构造函数似乎具有删除样板并保持代码更简洁的额外好处。

作者最终得出结论:

  

我们已经看到,对于设置初始状态,我们不再需要构造函数(或与此相关的任何其他实例属性)。我们也   不需要将其用于绑定方法。设置初始值相同   道具的状态。而且,我们绝对绝不会在   构造函数。

     

那为什么我们在React组件中需要构造函数?

     

好吧……你不知道。

     

[但是...如果您发现一些晦涩的用例,则需要   在客户端和服务器端的组件中初始化一些东西,   你仍然有出局。总有componentWillMount。在内部,   React在“更新”类后立即调用此钩子(该类称为   客户端和服务器上的构造函数)。]

     

因此,我认为对于React组件来说:构造函数死了,很长   住构造函数!