2017-10-03 1 views
1

J'écris reactjs et je veux utiliser The Power Of Not Mutating Data. Dans le code ci-dessous this.state.messages['hydra:member'] est un tableau d'objets et je veux savoir que dans ce code messages est une référence à this.state.messages['hydra:member'] ou un nouveau tableau. Si je le mute this.state.messages['hydra:member'] va changer ou pas?La puissance de ne pas mutations de données et de déstructuration d'affectation

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

Qu'en est-ce:

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

"* et une copie de *" - que voulez-vous dire? – Bergi

+0

Votre deuxième code n'a aucun sens, car la variable 'let' est confinée au bloc' if' qui ne fait rien avec. – Bergi

+1

où essayez-vous de faire exactement cela, quel est le contexte de votre problème? – adz5A

Répondre

0

Pour créer une copie en profondeur de this.state.messages['hydra:member'] vous pouvez faire comme suit

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

Maintenant, lorsque vous utilisez le tableau de messages que vous ne serez pas la mutation de l'état.

+0

Je sais cela, mais je veux savoir que je peux le faire avec "Affectation Destructuring"? –

+0

C'est une façon assez coûteuse de faire une copie en profondeur. – Ouroborus

+0

@Ouroborus Je vais par https://stackoverflow.com/questions/122102/what-is-the-most-efficient-way-to-deep-clone-an-object-in-javascript/5344074#5344074 Je n'ai pas personnellement testé l'efficacité de la solution par rapport aux autres. – palsrealm