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 に割り当てたいと考えています。