我有一个带有redux的应用程序结构:
app
|-router
| — dashboard container
| — — dashboard component
| — setting container
| — — setting component
考虑这两个容器,如果我需要从商店获取翻译文本,应该使用哪种方式?
(1)连接到路由器上的redux存储,并通过props传递到容器
(2)每个容器分别连接到redux存储
答案 0 :(得分:2)
redux的作者Dan Abramov在本期中说道
将道具传递给孩子或将其连接到商店的两种方法都是合适的,但是嵌套的connect()组件实际上将为您带来更高的性能。缺点是它们与应用程序的耦合程度更高,并且测试起来也较难,但这可能不是一个大问题。
他还表达了一个很好的经验法则,以便在reddit上遵循 https://www.reddit.com/r/reactjs/comments/4azg7q/using_redux_how_do_you_handle_subcomponents_of_a/
我这样做:
首先使用一个容器和几个演示组件 随着表示性组件树的增长,“中间”组件开始传递过多的道具 此时,我将一些叶子组件包装到容器中,以使“中间”组件不需要接受并传递与它们完全无关的道具 重复 他甚至为此发布了推文:
尝试将您的演示文稿组件分开。通过在方便时连接它们来创建容器组件。每当您想在父组件中复制代码以为相同种类的子代提供数据时,就该抽出容器了。
所以简单来说:
您可以在任何级别上使用connect()。这样做可以使组件更智能,因为它知道其道具来自何处。一个哑巴组件只有道具,它们可以来自任何地方。一个智能组件耦合到redux。愚蠢的组件不是。
答案 1 :(得分:0)
如果翻译是从路由器分派的,那么如果未通过分派操作来获取或更新翻译,则最好使用connect,并且永远不要通过传递更新。