2016-11-03 1 views
1

Nouveauté de React.js, j'ai du mal à utiliser l'opérateur spread dans mes réducteurs pour mettre à jour mon état qui a une propriété de tableau 2D.Redux: Utilisation de Spread Operator sur un tableau 2D

Par exemple état initial est ainsi:

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

Après la liaison de l'action, permet de dire que la charge utile va 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 } 
    } 
    } 
} 

Je suis en mesure de mettre à jour l'état du joueur, mais pas la grille. Essentiellement, je veux mettre à jour les coordonnées de oldCoords et l'affecter à 1.

Répondre

1

son ancienne parce que la valeur est affectée à null

let initialState = { grille: new Array (5) .Remplir (new Array (5) .Remplir (0)), joueur: {coords: null, santé: 100}}

et vous essayez de lire l'index de null zeroth, qui jette l'erreur.

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

Mise à jour:

grille

est un tableau, mais vous retournez le ..change d'objets au-dessous de la syntaxe

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

Désolé, j'oublié modifier mon poste où players.coords est déjà initialisé lorsque l'action est envoyée. – Alejandro