Redux: Использование Spread Operator в 2D массиве

Впервые в React.js мне трудно использовать оператор распространения в моих редукторах для обновления моего состояния со свойством 2D-массива.

Например, начальное состояние таково:

let initialState = {
    grid: new Array(5).fill(new Array(5).fill(0)),
    player: { coords: [2,3], health: 100 }
}

После привязки действия, скажем, полезная нагрузка переходит к PRESS_LEFT

case PRESS_LEFT: {
  let oldCoords = [state.player.coords[0], state.player.coords[1]];
  let newCoords = [state.player.coords[0], state.player.coords[1]-1];
  let thereIsWall = validateWall(state.grid, newCoords);
  if (thereIsWall){
    return state
  } else{
    return{
      ...state,
      player: { ...state.player, coords: newCoords },
      grid: { ...state.grid, state.grid[oldCoords[0]][oldCoords[1]] = 1 }
    }
  }
}

Я могу обновить состояние игрока, но не сетку. По сути, я хочу обновить координаты из oldCoords и назначьте его 1.

1 ответ

Его, потому что старое значение присваивается нуль

let initialState = { grid: новый массив (5).fill(новый массив (5).fill(0)), игрок: { координаты: ноль, здоровье: 100 } }

и затем вы пытаетесь прочитать нулевой индекс нуля, который выдаст ошибку.

let oldCoords = [state.player.coords[0], state.player.coords[1]];

Обновить:

grid это массив, но вы возвращаете объект.. измените синтаксис ниже

grid: [ ...state.grid, state.grid[oldCoords[0]][oldCoords[1]]=1 ]   
Другие вопросы по тегам