更新化简器中的数组项

时间:2019-08-18 14:04:28

标签: javascript reactjs react-native redux

在我的reducer状态下,我拥有数组

grounds: [
   {
     name: 'name1',
     id: 123
   }
   {
     name: 'name2',
     id: 456
   }
   {
     name: 'name3',
     id: 789
   }

]

我正在调度一个类似这样的动作

export const renameGound = (newName, id) => {
    return{
        type: RENAME_GROUND,
        newName: newName,
        id: id
    }
} 

我想要的是将名称值更新为具有我作为action.id获得的ID的对象。这是我尝试过的方法,它不起作用。

case actionTypes.RENAME_GROUND:
            return{
                ...state,
                grounds: state.grounds.forEach(el => {
                    if(el.id === action.id){
                        el.name = action.newName
                    }
                })
            }  

在上面所述的推杆式装载机的情况下,我错误地代替了理由,它可以工作,我不知道如何,但是它可以工作。但是当我这样尝试时……... p

如何更新正确的对象正确方法?

2 个答案:

答案 0 :(得分:4)

您能在reducer中尝试下一个代码吗?

return {
        ...state,
        grounds: state.grounds.map(el => {
          if (el.id === action.id) {
            return {
              ...el,
              name: action.newName
            };
          }

          return el;
        })
      };

还原剂保持纯净非常重要。您永远不要在内部更改其参数。

更多信息可以在Redux documentation

中找到

答案 1 :(得分:0)

您应使用reduce语法,如下所示:

 return{
            ...state,
            grounds: state.groundgrounds.reduce((newGrounds, ground) => {
                if(ground.id === action.id) {
                    newGrounds.push({
                        ...ground,
                        name: action.name
                    })
                 } else {
                        newGrounds.push(ground)
                 }
                return newGrounds;
             }, [])
        }