2017-12-21 6 views
1

Wie vermeiden Sie SetState mit Schleife? Ich habe diesesetState Array von Objekt

const here = [{a: 'abc'},{b: 'xyz'}]

ich this.setState({'some_other_key':123, ...here}) es nicht zu funktionieren scheint.

+0

Normalerweise setzen Sie den Status nicht auf das gesamte Objekt, sondern nur auf den Schlüssel, den Sie ändern möchten. Ein typisches Beispiel wäre this.setState ({some_other_key: 2}) – cdoshi

Antwort

1

Sie müssen nur diejenigen Element zur Verfügung zu stellen SetState, dass Sie wünschen, die anderen zu ändern und nicht, und daher brauchen Sie nur

this.setState({'some_other_key':123}) 

setState eine Zusammenführung durchführt und daher, wenn der Schlüssel vorhanden ist, ist sein Wert ändert Wenn es nicht existiert, wird ein neues erschaffen und alle anderen werden so gehalten, wie sie sind.

Um ein Objekt in die setState Array hinzuzufügen, können Sie die folgende

this.setState(prevState => ({ 
    exist: [...prevState.exist, {'some_other_key':123}] 
})) 
+0

Ich muss 'exist variable' setzen, vielleicht ist die Benennung verwirrend. –

+0

änderte Benennung BTW. –

+0

Jane, wie ich verstehe, müssen Sie das Array auf den Status festlegen und ein Objekt anhängen, ich habe meine Antwort aktualisiert, um das gleiche zu tun –

0

const exist = {{a: 'abc'},{b: 'xyz'}}

+1

Während reine Code-Antworten das ursprüngliche Problem lösen können, würde eine Erklärung Ihrer Lösung den allgemeinen Nutzen Ihrer Antwort verbessern. –

0

versuchen tun Wo ist die Schleife? Wenn Sie haben const here = {a:'abc', b:'xyz'} Dann this.setState({'some_other_key':123, ...here}) sollte funktionieren.

Wenn const here = [{a: 'abc'},{b: 'xyz'}] Dann {'some_other_key':123, ...here} ist

{ 'some_other_key': 123, 0: {a: 'abc'}, 1: {b: 'xyz'} }

Wenn const here = {a: 'abc', b: 'xyz'} Dann {'some_other_key':123, ...here} ist

{ 'some_other_key': 123, a: 'abc', b: 'xyz' } Dies ist, wie der Spread Operator '...' funktioniert.

Verwandte Themen