Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

361
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda