2017-03-01 42 views
2

例如,我有部件的这样的结构:连接到终极版什么时候应该连接组件以减少反应?

<Parent> 
     <Child_1> 
      <InnerChild_1 /> 
     </Chidl_1> 
     <Child_2> 
      <InnerChild_2 /> 
     </Chidl_2> 
</Parent> 

元器件<Parent>。有什么更好的方式来更新<InnerChild_1 />与应用程序状态,从<Parent>发送此数据与props或连接<InnerChild_1 />以减少?如果连接,我应该连接我的所有组件,这是使用状态,以减少?

回答

0

您可以使用扩展运算符(...道具)或上下文。

通过传播应该是这样的:

<InnerChild_1 
    {...this.props} 
/> 
+0

这是发送道具的另一种方式。我想知道,有什么更好的,发送道具或连接到REDX。 – Andrew

+1

最好的做法是保持尽可能多的顶部组件,并发送道具。 https://github.com/reactjs/redux/blob/master/docs/faq/OrganizingState.md – daniloprates

1

恕我直言,更好的使用connectContainers而不是Components

Container包含组件。所以connectredux状态到Container,然后将状态发送到Components作为props

在你的情况下,你可以假设<Parent />Container和其他孩子作为组件。

+0

如果我有很多嵌套,并需要重新渲染最后的组件,并且如果我从容器中发送道具所有我的组件“在途中”都将被重新渲染。这是正常的吗? – Andrew

+0

这方面的性能损失非常小。为了降低整体应用程序的复杂性,这是公平的权衡。是的,树上的组件会被重新渲染,但由于这些树上不会有很多DOM突变,所以它们无关紧要。如果你真的需要停止在树中途重新渲染,你总是可以到达'shouldComponentUpdate'。 – natnai

3

根据我的经验,您应该尽可能在应用程序中尽可能少地使用redux。作为一个经验法则,总是选择在组件链中传递道具,而不是在子组件中分派动作。对我来说,当你需要在多个容器组件之间共享状态时,redux真正发光。典型的用例是电子商务应用中的认证/用户数据。在你的情况下,我可以放心地说connect你的孩子组件只会导致不必要的间接性。

+1

100%同意;阅读“聪明”与“愚蠢”的组件;这里有一个(很多)帖子:https://medium.com/@dan_abramov/smart-and-dumb-components-7ca2f9a7c7d0#.ib885dqmd –

3

尽管所有其他答案都表明您应该顶级,但这确实是一个只适用于非常简单的应用程序的旧建议。

使用connect无论您需要保持组件与Redux存储库同步。在你的例子中,如果<Parent />没有使用任何状态,它的角色仅仅是组合性的,我不会连接那个状态。我会保留父标准React组件,并单独连接子项目。

对于具有嵌套实体的大型列表或复杂数据结构,这就是要走的路。

如果您选择其他方式并连接到最上面的组件,那么任何状态更改都会导致组件树完全重新呈现,而不会自动优化。由于connect ed组件将为您执行shouldComponentUpdate,因此通常会将多个项目连接到商店,而不是连接“列表”父项并在每次更改时重新呈现每个项目,从而获得更好的性能。

见阵营 - 终极版FAQ的终极版文档: http://redux.js.org/docs/faq/ReactRedux.html#react-multiple-components

具体做法是:

早期终极版文档,建议你应该只有靠近你的组件树顶部的几个 连接组件。但是,时间和经验表明,这通常需要几个组件来了解所有后代的数据需求,并迫使他们传递混乱的道具数量。

+0

我不能同意这一点。如果您深入了解React dom渲染器的源代码,您会发现,对于不改变道具的DOM元素进行差异化所带来的性能损失是最小的。 sCU在错误的手中是危险的,而且由于难以确定它被称为树的哪个位置,因此我的经验中出现了许多神秘的错误。 – natnai

+1

我一直在使用react-redux大约2年。我一直在使用智能vs转储组件方法,其中只有“智能”容器组件将连接到存储更改并将状态传递为属性。我的结论是,这种模式在几个方面已经过时并且有害:1.它在组件树中引入了沉重的嵌套组件依赖关系2.它通过确定整个树来重新呈现状态变化来影响性能3.当代码变成意大利面时传递树链中许多中间组件不需要的属性。 –

相关问题