我的减速器如下:
export const favorites = (state = {
favorites: [],
countFavorite: [],
}, action) => {
switch (action.type) {
case ActionTypes.ADD_FAVORITE:
return { ...state, favorites: action.payload };
case ActionTypes.COUNT_FAVORITE:
return { ...state, countFavorite: [...state.countFavorite, action.payload] };
default:
return state;
}
};
当前,我得到了旧状态和新状态以下的信息:
我希望新对象使用数组中的相同键覆盖现有对象,非常感谢您
答案 0 :(得分:1)
首先,您应该检查密钥是否存在,然后添加更多项目:
switch (action.type) {
case ActionTypes.ADD_FAVORITE:
return { ...state, favorites: action.payload };
case ActionTypes.COUNT_FAVORITE: {
let key = Object.keys(action.payload)[0];
return { ...state, countFavorite: [...state.countFavorite.filter(fa => Object.keys(fa)[0] !== key), action.payload] };
}
default:
return state;
}
答案 1 :(得分:0)
在这种情况下,您需要使用Array.filter仅过滤与action.payload中具有相同ID的对象,然后从数组中取出,然后填写action.payload。
应该看起来像这样。
case ActionTypes.COUNT_FAVORITE:
return { ...state, countFavorite: [ ...state.countFavorite.filter( fav => fav.id !== action.payload.id ), action.payload] };
您可以使用对象内的任何唯一标识符替换ID。这样,您可以省略要替换为较新对象的对象。