正如redux的作者Dan Abramov在 本期中 所说
将道具传递给子级或将其连接到商店的两种方法都是合适的,但是嵌套
connect()
组件实际上可以为您带来更高的性能。不利的一面是它们与应用程序的耦合程度更高,并且测试起来也更加困难,但这可能不是一个大问题。
他还明确指出了在
reddit
上应遵循的良好经验法则
我这样做:
- 首先使用一个容器和几个演示组件
- 随着表示性组件树的增长,“中间”组件开始传递过多的道具
- 此时,我将一些叶子组件包装到容器中,以便“中间”组件不需要接受和传递与它们完全无关的道具
- 重复
他甚至对此 发表了推文 :
尝试使演示文稿组件分开。通过在方便时连接它们来创建容器组件。每当您想在父组件中复制代码以提供相同种类的子代的数据时,就需要提取容器。
简单来说:
您可以
connect()在任何级别使用。这样做使组件变得智能,因为它知道其道具来自何处。一个哑巴组件只有道具,它们可以来自任何地方。一个智能组件耦合到redux。愚蠢的组件不是。
更新:react-redux v7及更高版本
同样的概念也适用
useSelectors。如果多个子组件使用相同的数据,则可以在容器组件中接收数据并传递到表示性组件
但是,如果子级使用的数据不同,则可以选择
useSelector在子级组件中单独使用。这样可以确保仅重新渲染那些实际需要



