在reactjs中,道具是通过值传递还是通过引用传递?

时间:2016-06-26 10:50:20

标签: reactjs

据我所知,如果我将父组件状态传递给子组件,那么该子组件将获得父组件的实时状态。

因此,父母的状态所做的改变也可以通过它所带来的道具立即在儿童身上获得。

这是对的吗?

5 个答案:

答案 0 :(得分:13)

它与语言中的任何其他语言基本相同,正如您所期望的那样。基元按值传递,非基元的变量将通过引用传递。

React在内部更新道具,以便孩子们始终拥有最新的道具价值。

This is the lifecycle method在接收道具的新值​​时调用。

但是,请确保您尊重所使用的基础架构以及React为您提供的公开API。

答案 1 :(得分:3)

如果将组件的状态作为props传递给其子组件,则如果父组件的状态发生更改,则会重新呈现,这也将使用刷新的属性重新呈现其子组件。孩子们没有像父母那样直接听取状态变化,只是因为父母状态的变化而更新了它们并进行了更新。

看看这个 - https://facebook.github.io/react/docs/multiple-components.html。它将帮助您了解这个概念的工作原理。希望这有帮助!

答案 2 :(得分:0)

当组件状态发生变化时,组件将由React重新呈现。在这样做的同时,它的子组件也会被重新渲染,这也会导致它们发生变化。

答案 3 :(得分:0)

不,它们不会被复制,您将通过引用访问这些道具,因为它们来自定义了它们的单个对象,然后将它们作为对子对象的引用传递。

您可以在此处查看官方文档:https://reactjs.org/docs/react-component.html

我建议使用无状态机制来处理大数据,尤其是在共享时。 我个人使用mobx(https://github.com/mobxjs/mobx),这是创建无状态应用程序的绝佳框架。

使用这种方法,您可以在一个名为Store的组件中处理数据和状态更新,并使用这些组件仅呈现html,而不处理数据,这极大地提高了应用程序的性能。

答案 4 :(得分:0)

简短答案:道具通过引用传递。

其原因可能令人困惑:如果您手动更改父级的状态(不好的做法!),则对象也会在子级组件中发生变化。但是不会触发重新渲染!(子组件不会“知道”其道具已更改。)因此您不会看到UI更改。

但是,如果您使用setState更改了父母的状态(首选做法),则会通知孩子,孩子必须重新渲染自己。

相关问题