在Redux

时间:2017-12-29 23:02:19

标签: redux react-redux

让我们想象一下,我希望能够使用React-Redux在Todo中选择任务。 我应该在哪里存储这个州?

第一个解决方案:在任务中添加isActive: true attribut

第二个解决方案:创建一个新的reducer以处理所选项目的ID。

我不喜欢这两种解决方案:第一种感觉就像我在其中存储与任务无关的东西,第二种感觉过度使用只能存储id的整个减速器。

还有其他选择吗?最好的是什么? 感谢

2 个答案:

答案 0 :(得分:3)

我说这取决于你的用例。

  1. 对于拥有大量UI状态的大型应用程序来说,使用特殊的reducer来改变与UI相关的商店片段是很有意义的。

  2. 如果您可以同时激活多个任务,则每个任务具有isActive: boolean属性是有效的。尽管从任务数据的角度来看它与任务无关,但它实际上是从任务的应用程序角度来看的。您的redux商店的主要目标是成为您的应用程序来源,而不仅仅是镜像您的API数据模型。

  3. 如果您当时只能激活/选择一项任务,您也可以拥有一个isActive: id

  4. 您也可以使用组件状态。这种情况的局限性在于它不会持续存在而且不会被共享。例如,如果您想要一个保存按钮,该按钮必须位于具有所选状态的组件内。

答案 1 :(得分:2)

您列出的两个选项中的任何一个都没有什么问题。但是,如果你正在寻找其他选择,你可以

1)在todos reducer状态中包含所选项,因此您的状态对象将如下所示:

{
  selected: id,
  list: [{id, text, completed}, ...]
}

2)如果您在应用中的任何其他位置不需要所选项目,则只需将其存储在本地状态即可。将Redux用于应用程序状态和本地状态混合仅包含在组件中的数据没有任何问题。