2017-10-03 1 views
1

Ich schreibe reactjs und ich möchte The Power Of Not Mutating Data verwenden. Im Code unter this.state.messages['hydra:member'] ist ein Array von Objekten und ich möchte wissen, dass in diesem Code messages ist ein Verweis auf this.state.messages['hydra:member'] oder ein neues Array. Wenn ich mutiere es this.state.messages['hydra:member'] wird sich ändern oder nicht?Die Macht der Notation von Daten und Zuordnung Destrukturierung

let {'hydra:member': messages = []} = this.state.messages; 

und was dazu:

if(this.state.messages['hydra:member'] !== undefined) { 
    let messages = this.state.messages['hydra:member']; 
} 
+0

"* und eine Kopie von *" - was meinst du? – Bergi

+0

Ihr zweiter Code macht keinen Sinn, da die 'let'-Variable auf den' if'-Block beschränkt ist, der nichts damit zu tun hat. – Bergi

+1

wo versuchen Sie dies genau zu tun, was ist der Kontext Ihres Problems? – adz5A

Antwort

0

Um eine tiefe Kopie von this.state.messages['hydra:member'] erstellen Sie tun können, als

if(this.state.messages['hydra:member'] !== undefined) { 
    let messages = JSON.parse(JSON.stringify(this.state.messages['hydra:member'])); 
    //use messages here 
} 

Nun folgt, wenn Sie die Nachrichten-Array verwenden, werden Sie nicht sein den Staat mutieren.

+0

Ich weiß das, aber ich möchte wissen, dass ich das mit "Zuordnung Destrukturierung" tun kann? –

+0

Das ist eine ziemlich teure Art, eine tiefe Kopie zu machen. – Ouroborus

+0

@Ouroborus Ich gehe durch https://Stackoverflow.com/questions/122102/what-ist-most-efficient-way-to-deep-clone-an-object-in-javascript/5344074#5344074 Discaimer: Ich habe die Effizienz der Lösung im Vergleich zu anderen nicht persönlich getestet. – palsrealm

Verwandte Themen