2016-07-25 16 views
0
getInitialState: function() { 
    p:{'Keeper' : [] , 'Defenders': [] , 'Midfield' : [], 'Forwards' : []}} 
} 
onUpdatePlayers : function (newState) { 
    var pos; 

    if (newState.position.includes('Back')) { 
     pos = 'Defenders' 
    } else if (newState.position.includes('Midfield')){ 
     pos = 'Midfield' 
    } else if (newState.position.includes('Forward')) { 
     pos = 'Forwards' 
    } else { 
     pos = newState.position; 
    } 

    this.state.p[pos].push(newState) 
} 

Grundsätzlich möchte ich einige Arrays in mehrere State-Eigenschaft schieben. Irgendwie muss ich diesen Code "this.state.p [pos] .push (newState)" zu verwenden this.setState. Ich habe es googlen und etwas gefunden wieReact - Push-Array zu State

this.setState({ 
     p : this.state.p[pos].concat([newState]) 
    }); 

Offensichtlich hilft es überhaupt nicht. Kannst du mir das bitte mitteilen? Es wird Big Thanks sein,

Prost !!

Antwort

0

Wenn Sie wirklich benötigen, dass Ihr Status tief geschachtelt ist, müssen Sie die gesamte -Eigenschaft durch ein neues Objekt ersetzen. Zum Beispiel Object.assign

this.setState({ 
    p: Object.assign(this.state.p, { 
    [pos]: this.state.p[pos].concat(newState) 
    }) 
}) 
+0

Danke Yury, es funktioniert mit Ihrer Methode. !! aber ich glaube, es ist nicht die beste Möglichkeit, das Array des multiplen Zustands mit der getInitialState-Methode zu definieren. Sagen wir, ich habe keinen InitialState. Ist sauberer und bessere Möglichkeit, das gleiche Ergebnis zurückgeben? aber nicht tief verschachtelt oder mit Object.assign? –

+0

"Es funktioniert mit Ihrer Methode." Könntest du da genauer sein? Wenn newState ein Array ist, sollte dieser Code mit dem im Status enthalten sein. 'Object.assign' arbeitet 1 Level tief. Sie müssen Code schreiben oder eine Bibliothek (z. B. lodash) verwenden, um ein tiefes Klonen durchzuführen. –

0

Danny Kim verwenden, fehlen Sie Zitate auf den neuen Schlüssel, den Sie hinzufügen wollten. Ändern Sie Ihre letzte Zeile zu

this.state.p['pos'].push(newState) 
+1

pos ist der Variablenbereich. Keine Zeichenfolge. Danke trotzdem –