我有以下函数采用动作类型并返回一个新状态,但是因为我不喜欢“切片”方法,我认为我会使用concat方法。注释掉的代码是使用新更新的对象更新状态的原始“切片”解决方案。但是,它不起作用,我甚至没有收到错误。
我的方法是将现有状态与n
连接起来function posts(state = [], action) {
switch(action.type) {
case 'INCREMENT_LIKES':
const i = action.index;
//console.log(newState);
// let newState = [
// // ...state.slice(0, i),
// // {...state[i], likes: state[i].likes + 1},
// // ...state.slice(i + 1),
// ]
// console.log(newState);
return state.concat([{...state[i], likes: state.likes +1}]);
default:
return state;
}
}
export default posts;
答案 0 :(得分:1)
此行将始终在状态return state.concat([{...state[i], likes: state[i].likes +1}]);
根据评论代码,您需要更新i
元素。你可以用地图来做。
return state.map((item, i) => (
i === action.index ? {...item, likes: item.likes + 1} : item)
);