有人可以告诉我为什么我们需要将props传递给Constructor()和super()。我已经阅读了很多与此有关的问题,也阅读了许多文章。所有人都说您应该将prop传递给构造函数和super,以便您可以访问this.props .....
如果我不将props传递给构造函数或super,我的所有代码仍然可以使用。而且我看不到任何情况都会改变。除非我想控制台记录this.props,否则可以通过控制台记录this
来实现。
另外,与我交谈过的开发人员中有一半确实通过了道具,而另一半则没有通过,因为他们觉得自己不需要,但是还不确定为什么会发生这种情况。
请问有人可以帮我一下吗?
谢谢
答案 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组件来说:构造函数死了,很长 住构造函数!