我现在正在尝试使用redux,并对它背后的想法感到非常兴奋,但是第一个真正的任务毁了整个事情。
在Redux中,我们应该存储不可变状态并生成一些reducers来转换它。这意味着每个州都可以通过给定的先前状态和一系列行动来复制。
但是如果我需要存储第三方/遗留有状态对象呢?例如,它可能类似于gallery或websocket客户端。 我假设我能够以某种方式使用reducers来启动/停止/管理它,但是状态我不再是无状态的并且不能保证在给定的reducers列表中可重复(websocket客户端可能会生成新的会话ID,甚至是无法维持连接。)
解决这些问题的便捷方法是什么?
答案 0 :(得分:7)
正如我所看到的,您的问题归结为:您如何将Redux与有状态组件(传统/第三方)混合使用?
你是对的,Redux更适合于controlled
组件,即大部分是无状态的组件,并且应该以{{1}}接收所有内容。请记住,拥有某些状态并不一定会使组件在Redux中无法使用。示例:对于自动填充组件,“打开”状态(无论下拉列表是否可见)不一定必须由Redux控制。因此,根据组件的实现方式,您肯定很难将其集成到Redux中,或者可能没有。
您有两个选择:您要么重构有问题的组件,以便它们现在受到控制,要么您不将它们的状态保留在Redux上(您不需要)。答案将根据具体情况而有所不同。我知道,对你的案件没有一个全球公认的解决方案。
答案 1 :(得分:2)
Here's a nice explanation from the FAQ docs.简而言之:
我是否必须将所有状态都放入Redux?我应该使用React的setState()吗?
对此没有“正确”的答案。有些用户更喜欢在Redux中保留每一段数据,以便始终保持其应用程序的完全可序列化和受控版本。其他人更喜欢在组件的内部状态内保持非关键或UI状态,例如“此下拉列表当前是否打开”。
使用本地组件状态很好。作为开发人员,您的工作是确定应用程序的状态类型以及每个状态应该存在的位置。找到适合您的天平,并随身携带。
那里有更多信息 - 值得一读。
答案 2 :(得分:0)
记住:redux 没有魔法;它只是一个为您设置道具的包装器/容器。
您甚至可以使用 shouldComponentUpdate
来管理更改有状态组件的 props 应如何触发渲染。
或者利用connect
的
areStatesEqual
areStatePropsEqual
areOwnPropsEqual
areMergedPropsEqual
为了更好的控制