J'ai un objet avec une structure simplifiée comme ceci:immutabilité suppression clé de l'objet par déstructurer
state = {
todo: {
1: {text: 'Buy apples'},
2: {text: 'Buy milk'}
}
}
Si je voulais supprimer un élément de todo immuabilité, selon d'autres réponses sur Stack Overflow je pourrais déstructurer de l'todo liste:
const idToDelete = 2
let {
[idToDelete]: deleted,
...newTodo
} = state.todo
Si je console.log(newTodo)
, il a la même valeur de state.todo
, ce qui signifie qu'il n'a pas supprimé Todo élément avec id 2. Si je console.log(deleted)
il renvoie le contenu du todo I vouloir del ete: {text: 'Buy milk'}
.
Je suis conscient qu'il serait un peu plus facile de gérer cela en utilisant une bibliothèque comme Immutable.js, mais je voudrais savoir pourquoi la déstructuration de l'objet ne supprime pas l'élément todo. Merci.
En général, rappelez-vous que tous les noms de propriétés d'objet en JavaScript sont des chaînes, et en utilisant des valeurs autres que les chaînes vont parfois donner des résultats inattendus. Dans ce cas, cependant, vous avez rencontré un bogue connu dans Babel: https://github.com/babel/babel/issues/4196 L'utilisation d'une chaîne au lieu d'un numéro résoudra le problème. –