为啥我必须将道具传递给构造函数和超级[重复]

Posted

技术标签:

【中文标题】为啥我必须将道具传递给构造函数和超级[重复]【英文标题】:Why must I Pass in props to Constructor And Super [duplicate]为什么我必须将道具传递给构造函数和超级[重复] 【发布时间】:2019-03-16 08:50:20 【问题描述】:

谁能告诉我为什么我们需要将 props 传递给 constructor() 和 super()。我已经阅读了很多关于此的问题,也阅读了很多文章。都说你应该将 props 传递给构造函数和 super 以便你可以访问 this.props .....

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

另外,在与我交谈过的开发人员中,有一半确实传递了道具,而另一半则没有,因为他们觉得他们不需要这样做,但不确定为什么会发生这种情况.

任何人都可以帮我解释一下吗?

谢谢

【问题讨论】:

不是重复的,我不是在问 super() 和 super(props) 之间有什么区别,我是在问为什么我的代码在没有将任何道具传递给构造函数并依次传递的情况下仍然有效它也变成了超级。 对不起,我不明白你在问什么。它之所以有效,是因为您没有在构造函数中使用this.props 我看不到构造函数中需要 this.props 的任何情况 那么真正的问题是“我为什么要在构造函数中使用this.props”?你不会,直接,但你可以调用一个使用它的函数。 【参考方案1】:

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

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

此外,this 这个 SO 答案揭示了为什么您需要在 ES6 中将道具传递给 super

但是,由于stateprops 的类属性,您不能将props 传递给constructor 并在没有它的情况下初始化本地状态,因此可以忽略其中的大部分内容。查看thisHacker Noon 文章,了解构造函数及其替代方案的一些“用例”。需要指出的一点是,作者提到 Babel 为您转换代码以添加构造函数——您只是看不到它。最终,我想如果是删除构造函数的问题,您可以像 Dave Ceddia 所指出的那样,将其作为preference 的问题。不过,移除构造函数似乎有额外的好处,即移除样板代码并保持代码更简洁。

最后,作者总结:

我们已经看到,为了设置初始状态,我们不再需要构造函数(或任何其他实例属性)。我们也 不需要它来绑定方法到 this。与设置初始相同 从道具状态。我们绝对不会在 构造函数。

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

嗯……你没有。

[然而……如果你发现一些你需要的晦涩的用例 初始化组件中的某些内容,包括客户端和服务器端, 你还有一个出局。总是有组件WillMount。在内部, React 在“更新”类之后立即调用这个钩子(它调用 构造函数)在客户端和服务器上。]

所以我对 React 组件保持这样的观点:构造函数已经死了,很长 活在构造函数中!

【讨论】:

以上是关于为啥我必须将道具传递给构造函数和超级[重复]的主要内容,如果未能解决你的问题,请参考以下文章

必须在构造函数中使用解构道具分配错误[重复]

将对象数组传递给构造函数[重复]

如何将超级的类型分配给子构造函数

使用构造函数将数组传递给对象后,值已更改(在 c++ 中)。我想不通为啥

将数组常量传递给枚举构造函数[重复]

将参数从php中的数组传递给构造函数[重复]