1

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

4

1 に答える 1

1

古い値が null に割り当てられているためです

let initialState = { grid: new Array(5).fill(new Array(5).fill(0)), player: { 座標: null, health: 100 } }

次に、null の 0 番目のインデックスを読み込もうとすると、エラーがスローされます。

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

アップデート:

grid は配列ですが、オブジェクトを返しています..構文を以下に変更します

grid: [ ...state.grid, state.grid[oldCoords[0]][oldCoords[1]]=1 ]   
于 2016-11-03T04:03:15.520 に答える