javascript – 如何使用redux与嵌套的子组件不会被重用?

前端之家收集整理的这篇文章主要介绍了javascript – 如何使用redux与嵌套的子组件不会被重用?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在研究一个具有许多子组件的组件,其中一些组件嵌套五深.我有兴趣使用redux在共同的状态原子中具有单一的真相来源的优点.

我不明白的是智能/愚蠢的组件建议,并将提供商放在主要组件之上,并通过道具传递所有东西.如果我这样做,那么我需要把道具一直传递到第五个嵌套的项目,所以它可以做一个回调来派遣一个动作,或者看一些只有它需要的状态,而不是它的父母.我明白这是代码重用,但是子组件永远不会在主组件之外使用.这里推荐的解决方案是什么?仍然使用道具?

注意:这个库的作者要求我们在StackOverflow上提出问题.我提到这个,因为SO似乎标榜“最佳实践”的问题太模糊.

解决方法

虽然 answer马克克莱门特的贴子确实在很高的水平上覆盖,但我会尝试在这里进一步深入.

你可以在任何级别使用connect().这样做使得组件变得聪明,因为它知道其道具来自哪里.一个愚蠢的组件只有道具,他们可以来自任何地方.智能组件耦合到redux;一个愚蠢的组件不是.

There are differing opinions on this approach,但它是支持和有效的.

绘制这条线的方法完全取决于你,但我们来看一个例子.您有一些聊天客户端,具有标准边栏组件,消息窗口和用于发送新消息的输入字段.

+---------+--------------------------+
|         |                          |
|Sidebar  |  Messages window         |
|         |                          |
|         |                          |
|         |                          |
|         |                          |
|         +--------------------------+
|         |  New Message Entry     **|
|         |                          |
+---------+--------------------------+

所有这些的父级将使用connect()从redux获取数据,并通过道具将其馈送到这些组件中.现在想象,除了新的消息条目之外,这两个星号打开一个设置面板(忽略愚蠢的位置,这是一个例子).新消息输入通过这些道具是否真的有意义?不,没有.

为了解决这个问题,你可以创建一个特殊的“容器”,让它调用它使用connect()来获取它的道具的SettingsContainer,它所做的一切都将它们传递给了SettingsPopup. SettingsPopup不会了解redux,并且仍然可以正常测试/样式/重新使用,新的消息条目只需要了解关于SettingsContainer,而不是任何依赖关系.

这种方法很好,但它有两个惩罚.首先,必须由其他愚蠢的组件使用“设置容器”这样的智能“包装”组件.这使得新消息输入组件的测试变得复杂化.第二,顶级组件不再暴露数据依赖关系的整个图形,这使得事情更难于推理,而不深入到组件层次结构中.

这些权衡是值得的,但你应该意识到这些.

原文链接:https://www.f2er.com/js/153730.html

猜你在找的JavaScript相关文章