在Redux中存储列表中选定项的模式
让我们想象一下,我希望能够在React Redux中选择一个任务。 我应该在哪里存储此状态 第一种解决方案:向任务添加在Redux中存储列表中选定项的模式,redux,react-redux,Redux,React Redux,让我们想象一下,我希望能够在React Redux中选择一个任务。 我应该在哪里存储此状态 第一种解决方案:向任务添加isActive:true属性 第二种解决方案:创建一个新的reducer来处理所选项目的id 我不喜欢这两种解决方案:第一种解决方案让我觉得我在其中存储了与任务无关的东西,第二种解决方案让我觉得创建一个完整的reducer只是为了存储一个id太费劲了 还有其他选择吗?什么是最好的? 谢谢您列出的两个选项都没有什么问题。但是,如果你在寻找其他选择,你可以 1) 在todos re
isActive:true
属性
第二种解决方案:创建一个新的reducer来处理所选项目的id
我不喜欢这两种解决方案:第一种解决方案让我觉得我在其中存储了与任务无关的东西,第二种解决方案让我觉得创建一个完整的reducer只是为了存储一个id太费劲了
还有其他选择吗?什么是最好的?
谢谢您列出的两个选项都没有什么问题。但是,如果你在寻找其他选择,你可以 1) 在todos reducer状态中包含选定项,使状态对象如下所示:
{
selected: id,
list: [{id, text, completed}, ...]
}
2) 如果您不需要应用程序中其他任何位置的所选项目,只需将其存储在您的本地州即可。混合应用程序状态的Redux和组件中单独包含的数据的本地状态没有什么错。我认为这取决于您的用例
isActive:boolean
属性是有效的。尽管从任务数据的角度来看,它与任务无关,但实际上它是从任务的应用程序角度来看的。redux商店的主要目标是成为应用程序的真实来源,而不仅仅是镜像API数据模型isActive:id
谢谢如果我使用第一个解决方案,一旦我想要修改id,您如何确保新状态是不可变的(并且不引用相同的列表数组)我找到的唯一解决方案是var newState=JSON.parse(JSON.stringify(state))newState.selected=action.idI在这里找到了关于此的更多信息:如果使用第一个解决方案,您只需使用新选定项的id更改selected的值。不需要更改列表的数组。仅当由于添加、删除或更新项而导致列表发生更改时,才可以对数组进行变异。在这种情况下,如果一次只有一个选定项,则更改选定项不会更改项数据本身的任何内容。