Javascript Redux更新状态数组对象属性
我有下面的函数,它接受一个动作类型并返回一个新状态,但是因为我不喜欢“slice”方法,所以我想我会使用concat方法。注释掉的代码是用新更新的对象更新状态的原始“切片”解决方案。然而,它不工作,我甚至没有得到一个错误 我的方法是将现有状态与n连接起来Javascript Redux更新状态数组对象属性,javascript,reactjs,ecmascript-6,redux,Javascript,Reactjs,Ecmascript 6,Redux,我有下面的函数,它接受一个动作类型并返回一个新状态,但是因为我不喜欢“slice”方法,所以我想我会使用concat方法。注释掉的代码是用新更新的对象更新状态的原始“切片”解决方案。然而,它不工作,我甚至没有得到一个错误 我的方法是将现有状态与n连接起来 function posts(state = [], action) { switch(action.type) { case 'INCREMENT_LIKES': const i = actio
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;
此行将始终在state
返回state.concat([{…state[i],likes:state[i].likes+1})的末尾追加新元素代码>
根据注释的代码,您需要更新i
th元素。你可以用地图
return state.map((item, i) => (
i === action.index ? {...item, likes: item.likes + 1} : item)
);
尝试通过redux开发者工具调试您的应用商店,您将看到这两个代码片段不会产生相同的结果。最后一个likes:state[i]。likes+1