Redux NGXS:我们能把数组中的一个对象拆分成一个子状态吗?
我的顶级状态模型如下所示:Redux NGXS:我们能把数组中的一个对象拆分成一个子状态吗?,redux,ngxs,Redux,Ngxs,我的顶级状态模型如下所示: { listOfItems: [], // Item[] selections: { itemId: 0 } } 项目列表可能包含10种不同的购物项目。 当用户单击某个项目时,它会更新所选内容,我的@Selector将重新运行 操作:设置项目选择 @Action(Item.Select) setState( { setState }: StateContext<ItemsModel>,
{
listOfItems: [], // Item[]
selections: {
itemId: 0
}
}
项目列表可能包含10种不同的购物项目。
当用户单击某个项目时,它会更新所选内容,我的@Selector
将重新运行
操作:设置项目选择
@Action(Item.Select)
setState(
{ setState }: StateContext<ItemsModel>,
{ itemId }: Item.Select
) {
setState(patch({ selections: patch({ itemId }) }));
}
问题是:我最多可以对所选项目执行20个操作。这导致:
.find()
查找以在原始数组中查找项(包括选择器和操作)列表项执行的操作与对特定项执行的操作位于同一位置
我不知道如何保持它们的同步。当父项中的选择项ID更改时,我需要保持“selectedItem”状态为最新状态。我还需要确保selectedItem的任何突变都反映在父元素的原始数组中 这似乎更像是如何表示应用程序状态的一个基本问题。你有没有想过规范你的物品清单?或者至少使用键/值查找对象而不是数组?您不需要使用.find()进行查找,并且可以通过感兴趣的唯一id访问对象的键。如果有什么帮助,请告诉我 是的,底线是你是对的,数据结构不是Redux友好的。我想我的问题更多地集中在将
@操作
从状态中分离出来,因为有太多的操作,但这不能不将状态分解成更小的部分。将数组映射为键/对象对将解决顶层.find(),但我有许多嵌套数组,因此实际上不可行。主要问题是,应用程序的构建一开始并没有考虑Redux。谢谢你的回答。
@Selector()
static getSelectedItem(state: ItemModel): Item {
return state.itemList.find(i => i.itemId === state.selections.itemId);
}