Javascript Redux更新状态数组对象属性

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

我有下面的函数,它接受一个动作类型并返回一个新状态,但是因为我不喜欢“slice”方法,所以我想我会使用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;

此行将始终在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