当前位置: 首页 > 知识库问答 >
问题:

为什么我必须传递道具给构造函数和超级[复制]

计阳泽
2023-03-14

有人能告诉我为什么我们需要将道具传递给构造函数()和super()。我读了很多关于这方面的问题,也读了很多文章。所有人都说你应该把道具传给构造函数和super,这样你就可以访问这个道具了。。。。。

如果我不将道具传递给构造函数或super,我的所有代码仍然可以工作。我看不出这会有什么变化。除非我想控制台记录this.props,这可以通过控制台记录this来实现。

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

有人能帮我解释一下吗?

谢啦

共有1个答案

洪飞驰
2023-03-14

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

文档给出了使用构造函数中的道具分配初始状态的示例。对于具有本地状态的组件,这是向构造函数传递道具的一个很好的用例。

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

尽管如此,由于stateprops的类属性,您无法将props传递给constructor并在没有它的情况下初始化您的本地状态,因此这一点可以忽略不计。查看这篇黑客午间文章,了解构造函数及其替代品的一些“用例”。需要指出的一点是,作者提到Babel将代码传输给您以添加构造函数——您只是看不到而已。最后,我想如果这是一个删除构造函数的问题,那么您可以作为一个优先事项来做,正如Dave Ceddia所指出的那样。不过,删除构造函数似乎还有一个额外的好处,那就是删除样板文件并保持代码更干净。

最后,作者得出结论:

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

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

嗯……你不知道。

[然而...如果您发现一些模糊的用例,需要在组件中初始化一些东西,包括客户端和服务器端,您仍然有一个out。总是有组件的。在内部,React在更新客户端和服务器上的类(调用构造函数)后调用此钩子。]

所以我认为对于React组件:构造函数已经死了,构造函数万岁!

 类似资料:
  • 我需要使用ArrayList在java中实现我自己的通用二进制堆。它需要支持最大堆和最小堆。这应该通过将比较器传递给BinaryHeap构造函数来实现。 尝试了Dmitrys通知,它生成。这是采用比较器的超级构造函数:

  • 可能的重复: 为什么this()和super()必须是构造函数中的第一条语句? 为什么子类构造函数必须显式调用超类构造函数?这是什么原因呢?

  • 问题内容: 在Java的构造函数中,如果要调用另一个构造函数(或超级构造函数),则它必须是该构造函数的第一行。我认为这是因为不允许您在其他构造函数运行之前修改任何实例变量。但是,为什么不能在构造函数委派之前使用语句,以便计算另一个函数的复杂值?我想不出任何正当的理由,在一些实际案例中,我编写了一些丑陋的代码来解决此限制。 所以我只是想知道: 有此限制的充分理由吗? 有没有计划在将来的Java版本中

  • 我意识到super关键字可以用来调用父组件中的函数。但是,我不完全清楚为什么在下面的示例中使用super关键字——只是将传递给构造函数的任何道具传递给它。 在react中,有人能解释一下在ES6类构造函数中使用super关键字的各种原因吗?

  • 问题内容: 如果不可变的类对象副本将与原始副本相等,那么为什么Java 中的类具有副本构造函数?这是一个错误还是背后有原因?在Java文档中,指定了: 问题答案: 复制字符串的主要原因是为了 “修剪行李” ,即仅将底层char数组修剪为必需的字符。 基本的char数组可能太大,因为通过调用创建字符串时,char数组可以在新的字符串实例和源字符串实例之间共享;偏移量指向第一个字符,并且包括长度。 我

  • 我正在尝试通过:如果流文件; 在我的主()中,到一个名为“FIFO”的类的构造函数:FIFO(文件); 在FIFO(FIFO.h)的头文件中,我有: 在FIFO.cc,我有: 我一直喜欢(还有更多,我只是粘贴其中一个): 在文件包括从/usr/lib/gcc/x86_64-redhat linux/4.4.7/…/…/…/…/包含/c /4.4.7/bits/localefwd.h: 43,从/u