使用Connect或将数据作为道具传递给子项

时间:2017-11-15 05:58:09

标签: reactjs redux react-redux

我是新手做出反应和减少。我有一个场景,其中有这样的嵌套组件。

A> B> C> d

A组件中使用了一个属性,它将用于D组件。所以,我有两种方法:

  1. 从组件A中的redux store获取状态,然后将其作为props传递给它的所有子组件,即使它只在D组件中使用。
  2. 我应该连接到组件D中的redux store并从那里获取该属性。
  3. 什么是正确的方法?

2 个答案:

答案 0 :(得分:24)

作为丹·阿布拉莫夫,redux的作者在此 issue

中说
  

将道具传递给儿童或连接它们的两种方法   到商店是合适的,但嵌套connect()   组件实际上会为您提供更多性能。该   缺点是它们与应用程序的关联程度稍微高一些   稍微难以测试,但这可能不是一个大问题。

他还提出了一个很好的经验法则,可以跟随 reddit

我是这样做的:

  
      
  • 首先使用一个容器和几个表示组件
  •   
  • 随着表现构件树的增长,“中间”组件开始传递过多的道具
  •   
  • 此时,我将一些叶子组件包装到容器中,以便“中间”组件不需要接受并传递道具   与他们完全无关的
  •   
  • 重复
  •   

他甚至 tweeted

  

尝试将您的演示文稿组件分开。创建容器   组件通过在方便的时候连接它们。无论何时你觉得你在父组件中复制代码来为同类儿童提供数据,都需要时间来提取容器。

所以用简单的话说:

您可以在任何级别使用connect()。这样做会使组件变得聪明,因为它知道它的道具来自何处。一个愚蠢的组件只有道具,它们可以来自任何地方。智能组件与redux耦合;一个愚蠢的组成部分不是。

答案 1 :(得分:1)

我建议如果你已经在你的app中使用了redux,那么在redux商店中设置属性并在组件D中获取它。

但是,如果工作流程非常简单,并且每个视图都从单个源获取所有数据,则可以避免使用redux,因为它适用于复杂的状态管理。