如何更新嵌套的redux状态

时间:2017-09-12 11:32:16

标签: react-redux

我有以下结构

lookups --> Object
lookups.CATEGORIES --> array of category objects
lookups.TIMEZONES --> array of timezone objects

我想添加新对象,它是一个具有lookup_type属性的查找对象。它可以是'CATEGORY'或'TIMEZONE'。 根据lookup_type,必须将新添加的对象添加到CATEGORIES或TIMEZONES对象。如何实现这一目标? 查找对象的结构

lookups: {CATEGORIES:[{obj1}, {obj2}...], TIMEZONES:[{obj1}, {obj2}, {obj3}...]}

2 个答案:

答案 0 :(得分:2)

您也可以在嵌套对象或数组上使用spread:

return {
  ...state,
  [action.lookupType]: [
    ...state[action.lookupType],
    action.value,
  ]
};

这会在Categories或Timezone中添加一个新项目,如果你想要替换一个值或者将它插入索引等,那么你应该在返回的上方构建新数组,然后传递它。另请注意,数组传播是ES7。

答案 1 :(得分:0)

您可能希望将查找对象作为查找缩减器处理的操作的有效内容传递。在lookup reducer中检查值action.payload.lookup_type并返回一个新的CATEGORIES或TIMEZONES数组的状态,该数组包含该数组的旧值和查找对象。如果您不确定如何使用它,您应该首先查看一些redux示例。