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}
有没有一种方法可以传播对象并仅更新已更改的对象?
这是因为您覆盖了 tap
和 griff
值,而不考虑它们的输入值。试试下面。
const newOptions = {};
if (action.tap) {
newOptions.tap = action.tap;
}
if (action.griff) {
newOptions.griff = action.griff;
}
return (state = {
...state,
moreOptions: {
...state.moreOptions,
...newOptions
}
});
所以我有以下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}
有没有一种方法可以传播对象并仅更新已更改的对象?
这是因为您覆盖了 tap
和 griff
值,而不考虑它们的输入值。试试下面。
const newOptions = {};
if (action.tap) {
newOptions.tap = action.tap;
}
if (action.griff) {
newOptions.griff = action.griff;
}
return (state = {
...state,
moreOptions: {
...state.moreOptions,
...newOptions
}
});