Redux 改变一个 object 类型的 reducer

Redux change a reducer of type 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 调试器工具的屏幕截图

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

这是因为您覆盖了 tapgriff 值,而不考虑它们的输入值。试试下面。

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