Redux更新状态数组对象属性

时间:2018-01-22 15:38:00

标签: javascript reactjs ecmascript-6 redux

我有以下函数采用动作类型并返回一个新状态,但是因为我不喜欢“切片”方法,我认为我会使用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;

1 个答案:

答案 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)
);