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
Arrayse 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
.splicepara eliminar el elemento de la matriz. Usandodelete, los índices de la matriz no se alterarán, pero el valor del índice específico seráundefinedSintaxis:
array.splice(start, deleteCount[, item1[, item2[, ...]]])Editar:
Como lo señaló justin-grant , como regla general, nunca mutes
this.statedirectamente, ya que llamarsetState()después puede reemplazar la mutación que hiciste. Trátelothis.statecomo si fuera inmutable.La alternativa es crear copias de los objetos
this.statey manipular las copias, asignándolas de nuevo usandosetState().Array#map,Array#filteretc.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 !== deletePostIdAlgunas 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
filterporque no muta la matriz. Ejemplo:fuente
Redfer doc para más información
fuente