Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

372
Views
Eliminar elemento de la matriz en estado de componente

Estoy tratando de encontrar la mejor manera de eliminar un elemento de una matriz en el estado de un componente. Dado que no debo modificar la variable this.state directamente, ¿hay una mejor manera (más concisa) de eliminar un elemento de una matriz que la que tengo aquí?:

 onRemovePerson: function(index) { this.setState(prevState => { // pass callback in setState to avoid race condition let newData = prevState.data.slice() //copy array from prevState newData.splice(index, 1) // remove element return {data: newData} // update state }) },

Gracias.

actualizado

Esto se ha actualizado para usar la devolución de llamada en setState. Esto debe hacerse al hacer referencia al estado actual mientras se actualiza.

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

La forma más limpia de hacer esto que he visto es con filter :

 removeItem(index) { this.setState({ data: this.state.data.filter((_, i) => i !== index) }); }
over 4 years ago · Santiago Trujillo Report

0

Podría usar el asistente de inmutabilidad update() de react-addons-update , que efectivamente hace lo mismo debajo del capó, pero lo que está haciendo está bien.

 this.setState(prevState => ({ data: update(prevState.data, {$splice: [[index, 1]]}) }))
over 4 years ago · Santiago Trujillo Report

0

Creo que se desaconseja hacer referencia this.state dentro de setState() ( las actualizaciones de estado pueden ser asincrónicas ).

Los documentos recomiendan usar setState() con una función de devolución de llamada para que se pase prevState en tiempo de ejecución cuando se produzca la actualización. Así es como se vería:

Usando Array.prototype.filter sin ES6

 removeItem : function(index) { this.setState(function(prevState){ return { data : prevState.data.filter(function(val, i) { return i !== index; })}; }); }

Uso de Array.prototype.filter con funciones de flecha ES6

 removeItem(index) { this.setState((prevState) => ({ data: prevState.data.filter((_, i) => i !== index) })); }

Usando el ayudante de inmutabilidad

 import update from 'immutability-helper' ... removeItem(index) { this.setState((prevState) => ({ data: update(prevState.data, {$splice: [[index, 1]]}) })) }

Uso de propagación

 function removeItem(index) { this.setState((prevState) => ({ data: [...prevState.data.slice(0,index), ...prevState.data.slice(index+1)] })) }

Tenga en cuenta que en cada instancia, independientemente de la técnica utilizada, this.setState() recibe una devolución de llamada, no una referencia de objeto al anterior this.state ;

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!