【问题标题】:Redux update state array object propertyRedux 更新状态数组对象属性
【发布时间】:2018-07-01 07:07:57
【问题描述】:

我有以下函数,它接受一个动作类型并返回一个新状态,但是由于我不喜欢“切片”方法,我想我会改用 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;

【问题讨论】:

  • 尝试通过 redux 开发者工具调试你的 store,你会发现这两个 sn-ps 不会产生相同的结果
  • 至少likes: state[i].likes +1

标签: javascript reactjs ecmascript-6 redux


【解决方案1】:

此行将始终在状态 return state.concat([{...state[i], likes: state[i].likes +1}]); 的末尾追加新元素

根据注释代码,您需要更新ith 元素。你可以使用地图来做到这一点。

return state.map((item, i) => (
  i === action.index ? {...item, likes: item.likes + 1} : item)
);

【讨论】:

    猜你喜欢
    • 2019-12-07
    • 1970-01-01
    • 2021-05-28
    • 1970-01-01
    • 1970-01-01
    • 2019-01-28
    • 2019-04-28
    • 2019-11-12
    • 1970-01-01
    相关资源
    最近更新 更多