如何使用Redux更新状态中的1个项目?

3

我有一个 reducer,想要在状态数组中更新一项。它看起来像这样:

const players = (state = [{name:'John',nrGames:0,nrWins:0},{name:'Ed',nrGames:0,nrWins:0},{name:'Mark',nrGames:0,nrWins:0}], action) => {
    switch (action.type) {

        case 'ADD_PLAYER':
            return [...state,{name:action.name}]

        case 'ADD_WIN':
            return [...state, action.name == 'bla' ? {nrWins:10} : {} ]

        default:
            return state;
    }
};

export default players;

我试图弄清楚如何更改特定名称的nrWins属性。因此,当使用name ='John'分派ADD_WIN时,如何仅更新John对象并将nrWins属性加1而不是状态中的其他对象?

2个回答

3

您需要对玩家进行.map操作,当您找到正在描述动作的玩家时,创建一个新的玩家,其中包含更新后的获胜次数。为了提高可读性,我创建了一个名为incWinForPlayer的函数。

const incWinForPlayer = (name) => (player) => {
  return player.name === name
    ? {...player, nrWins: player.nrWins + 1}
    : player
};

const players = (state, action) => {
  switch (action.type) {
    case 'ADD_PLAYER':
      return [...state, {name: action.name}]
    case 'ADD_WIN':
      return state.map(incWinForPlayer(action.name));
    default:
      return state;
  }
};

export default players;

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接