L'histoire est que je devrais être capable de mettre Bob, Sally et Jack dans une boîte. Je peux également retirer l'un ou l'autre de la boîte. Lorsqu'il est retiré, aucun emplacement n'est laissé.
people = ["Bob", "Sally", "Jack"]
Je dois maintenant supprimer, disons, "Bob". Le nouveau tableau serait:
["Sally", "Jack"]
Voici mon composant de réaction:
...
getInitialState: function() {
return{
people: [],
}
},
selectPeople(e){
this.setState({people: this.state.people.concat([e.target.value])})
},
removePeople(e){
var array = this.state.people;
var index = array.indexOf(e.target.value); // Let's say it's Bob.
delete array[index];
},
...
Ici, je vous montre un code minimal car il y a plus (onClick, etc.). La partie clé est de supprimer, supprimer, détruire "Bob" du tableau mais removePeople()
ne fonctionne pas lorsqu'il est appelé. Des idées? Je regardais cela mais je fais peut-être quelque chose de mal depuis que j'utilise React.
javascript
arrays
reactjs
Sylar
la source
la source
array.splice(array, 1);
Merciarray.splice(array, 1);
? Je suppose que vous devez le modifier ... Vous devriez utiliser différentes variables ...setState()
.Lorsque vous utilisez React, vous ne devez jamais muter l'état directement. Si un objet (ou
Array
, qui est également un objet) est modifié, vous devez créer une nouvelle copie.D'autres ont suggéré d'utiliser
Array.prototype.splice()
, mais cette méthode fait muter le tableau, il est donc préférable de ne pas l'utilisersplice()
avec React.Le plus simple à utiliser
Array.prototype.filter()
pour créer un nouveau tableau:la source
this.setState(prevState => ({ people: prevState.people.filter(person => person !== e.target.value) }));
this.state.people.filter((_, i) => i !== index)
Voici une variation mineure de la réponse d'Aleksandr Petrov en utilisant ES6
la source
Utilisez
.splice
pour supprimer l'élément du tableau. En utilisantdelete
, les index du tableau ne seront pas modifiés mais la valeur de l'index spécifique seraundefined
Syntaxe:
array.splice(start, deleteCount[, item1[, item2[, ...]]])
Éditer:
Comme l'a souligné justin-grant , en règle générale, ne jamais muter
this.state
directement, car un appelsetState()
après peut remplacer la mutation que vous avez faite. Traitezthis.state
comme s'il était immuable.L'alternative est de créer des copies des objets dans
this.state
et de manipuler les copies, en les attribuant à nouveau à l'aide desetState()
.Array#map
,Array#filter
etc. pourraient être utilisés.la source
setState
. D'autres réponses ont des détails sur la façon de procéder.Moyen facile de supprimer l'élément du tableau d'état dans react:
lorsque des données sont supprimées de la base de données et de la liste de mise à jour sans appel d'API à ce moment-là, vous transmettez l'ID supprimé à cette fonction et cette fonction supprime les fichiers supprimés enregistrés de la liste
la source
item.post_id !== deletePostId
Certaines réponses ont mentionné l'utilisation de `` splice '', ce qui a fait comme Chance Smith l'a dit a muté le tableau. Je vous suggère d'utiliser la méthode d'appel «slice» (le document pour «slice» est ici) qui fait une copie du tableau d'origine.
la source
C'est très simple d'abord vous définissez une valeur
Maintenant,
la source
Vous avez oublié d'utiliser
setState
. Exemple:Mais il est préférable de l'utiliser
filter
car il ne mute pas le tableau. Exemple:la source
Redfer doc pour plus d'informations
la source