【发布时间】:2019-04-23 12:57:39
【问题描述】:
我有一个来自服务器的值。它包含与我的状态对象具有相同键的对象。该对象的键值是一个包含一项的数组。要在我的 reducer 中处理这个值,我需要将此数组项添加到我状态中的现有对象键中。
简而言之:
我有来自服务器的:{ TEST: ['item1'] }
我的状态是:{ TEST: ['item2'], TEST2: ['item3'] }
预期结果:{ TEST: ['item1', 'item2'], TEST2: ['item3'] }
const handleCreateItemFilter = (state, { payload }) => {
const { list } = payload;
const updatedList = { ...state.regions.list };
updatedList[Object.keys(list).join()] = [...updatedList[Object.keys(list).join()], Object.values(list).join()];
return {
...state,
regions: {
...state.regions,
list: updatedList,
},
selectedFilter: {
...state.selectedFilter, unassignedCountries: [], regions: Object.keys(list).join(),
},
};
};
目前,我像上面的示例一样解决了它:创建新的 updatedList,从服务器中为我的对象找到合适的键,并将旧键值和新键值分配给我的新对象数组。但我认为这不是解决这个问题的好方法。
【问题讨论】:
-
可以添加真实的服务响应吗?你真正期待什么?
-
我的期望只是使用 reducer 更新我的商店状态
-
你问题的措辞让我很困惑,因为键是字符串。将项目添加到对象键对我来说没有意义。你正在编写一个reducer,所以你甚至没有向数组中添加一个项目,你正在创建一个新数组。最后——你为什么不认为这是一个好方法?你读过stackoverflow.com/a/40925668/1563833
-
好吧,这段代码
updatedList[Object.keys(list).join()] = [...updatedList[Object.keys(list).join()], Object.values(list).join()];对我来说很迷茫。可能您需要改进此实现。我正在尝试使此代码正常工作,以帮助您。 jsbin.com/bocudojire/edit?js,console,output -
同意,这段代码虽然有效,但看起来令人困惑。
标签: javascript reactjs react-redux