La historia es que debería poder poner a Bob, Sally y Jack en una caja. También puedo quitar cualquiera de la caja. Cuando se quita, no queda ninguna ranura.
people = ["Bob", "Sally", "Jack"]
Ahora necesito eliminar, digamos, "Bob". La nueva matriz sería:
["Sally", "Jack"]
Aquí está mi componente de reacción:
...
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];
},
...
Aquí les muestro un código mínimo ya que hay más (onClick, etc.). La parte clave es eliminar, eliminar, destruir "Bob" de la matriz, pero removePeople()
no funciona cuando se llama. ¿Algunas ideas? Estaba viendo esto, pero podría estar haciendo algo mal ya que estoy usando React.
javascript
arrays
reactjs
Sylar
fuente
fuente
array.splice(array, 1);
Graciasarray.splice(array, 1);
? Supongo que necesitas editarlo ... Deberías usar diferentes variables ...setState()
.Cuando use React, nunca debe mutar el estado directamente. Si
Array
se cambia un objeto (o , que también es un objeto), debe crear una nueva copia.Otros han sugerido usarlo
Array.prototype.splice()
, pero ese método muta el Array, por lo que es mejor no usarlosplice()
con React.Más fácil de usar
Array.prototype.filter()
para crear una nueva matriz:fuente
this.setState(prevState => ({ people: prevState.people.filter(person => person !== e.target.value) }));
this.state.people.filter((_, i) => i !== index)
Aquí hay una variación menor en la respuesta de Aleksandr Petrov usando ES6
fuente
Úselo
.splice
para eliminar el elemento de la matriz. Usandodelete
, los índices de la matriz no se alterarán, pero el valor del índice específico seráundefined
Sintaxis:
array.splice(start, deleteCount[, item1[, item2[, ...]]])
Editar:
Como lo señaló justin-grant , como regla general, nunca mutes
this.state
directamente, ya que llamarsetState()
después puede reemplazar la mutación que hiciste. Trátelothis.state
como si fuera inmutable.La alternativa es crear copias de los objetos
this.state
y manipular las copias, asignándolas de nuevo usandosetState()
.Array#map
,Array#filter
etc.podrían utilizarse.fuente
setState
. Otras respuestas tienen detalles sobre cómo hacer esto.Manera fácil de eliminar el elemento de la matriz de estado en reaccionar:
cuando cualquier dato se borra de la base de datos y actualiza la lista sin llamar a la API esa vez, pasa la identificación eliminada a esta función y esta función elimina los borrados registrados de la lista
fuente
item.post_id !== deletePostId
Algunas respuestas mencionaron el uso de 'empalme', lo que hizo que Chance Smith mutara la matriz. Le sugiero que use la llamada al método 'slice' (el documento para 'slice' está aquí) que hace una copia de la matriz original.
fuente
Es muy simple Primero, define un valor
Ahora,
fuente
Olvidaste usar
setState
. Ejemplo:Pero es mejor usarlo
filter
porque no muta la matriz. Ejemplo:fuente
Redfer doc para más información
fuente