2016-11-03 4 views
1

Neu in React.js, ich habe es schwer, den Spread-Operator in meinen Reduzierungen zu verwenden, um meinen Status mit einer 2D-Array-Eigenschaft zu aktualisieren.Redux: Verwenden von Spread Operator auf 2D-Array

Zum Beispiel Anfangszustand ist so:

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

Nach der Aktion Bindung, kann sagen, die Nutzlast zu PRESS_LEFT dem Spieler Zustand,

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 } 
    } 
    } 
} 

ich in der Lage bin geht zu aktualisieren, aber nicht das Gitter. Im Grunde möchte ich die Koordinaten von oldCoords und weisen sie aktualisieren 1.

Antwort

1

sein, weil der alte Wert

lassen initial = { Raster auf null zugeordnet: new Array (5) .fill (new Array (5) .fill (0)), Spieler: {coords: null, Gesundheit: 100} }

und dann versuchen Sie nullten Index von null zu lesen, die den Fehler werfen.

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

Update:

Gitter ein Array ist, aber sie kehren das Objekt ..change auf unter Syntax

grid: [ ...state.grid, state.grid[oldCoords[0]][oldCoords[1]]=1 ] 
+0

Sorry, habe ich vergessen, meinen Beitrag bearbeiten, wo players.coords bereits initialisiert, wenn die Aktion ausgelöst wird. – Alejandro

Verwandte Themen