首页 > 解决方案 > Redux 改变了一个类型为 object 的 reducer

问题描述

所以我有以下减速器

const objectType = (state = {type: 0, image:defaultImage, moreOptions: {tap: 0, griff: 0} },
    action) => {....

case 'CHANG_OPTIONS':
      return state = {...state, moreOptions: {tap:action.tap, griff: action.griff}}

这是动作,所以我得到一个动态类别并分配产品的 id。

export const changeOptions = (category, id) => {
    return {
        type: 'CHANG_OPTIONS',
        [category]: id,
    }
}

调度的一个例子是

dispatch(changeOptions('tap', 0))

现在,每当我单击水龙头或 griff 时,我的对象都会从列表中删除另一个类别。

这是 Redux Debugger 工具的屏幕截图

在此处输入图像描述

我确定问题出在我的减速器上: moreOptions: {tap:action.tap, griff: action.griff}有没有一种方法可以传播对象并仅更新已更改的对象?

标签: reactjsobjectreduxreducers

解决方案


这是因为无论它们的输入值如何,您都覆盖了两者tapgriff值。下面试试。

const newOptions = {};
if (action.tap) {
  newOptions.tap = action.tap;
}
if (action.griff) {
  newOptions.griff = action.griff;
}
return (state = {
  ...state,
  moreOptions: {
    ...state.moreOptions,
    ...newOptions
  }
});

推荐阅读