Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

113
Vistas
Actualizar una propiedad de objeto dentro de una matriz de objetos en React

Estoy en el lado más nuevo de React y trato de cambiar el estado de un objeto en una matriz. Actualmente, estoy sacando el objeto de la matriz, cambiando la propiedad en ese objeto y luego agregando el nuevo objeto al estado nuevamente. El problema es que envía el objeto al final de la lista y reordena las entradas de mi casilla de verificación.

 const handleChange = (e) => { if (e.target.type === "checkbox") { // Get the role from the current state const roleToChange = input.roles.find( (role) => Number(role.id) === Number(e.target.id) ); // Change checked state to opposite of current state const changedRole = { ...roleToChange, checked: !roleToChange.checked }; // Get every role except the one that was changed const newRoles = input.roles.filter( (role) => Number(role.id) !== Number(e.target.id) ); // Update the role in the state setInput((prevState) => { return { ...prevState, roles: [...newRoles, changedRole] }; }); }

¿Puedo actualizar el objeto en la matriz en el lugar para que esto no suceda?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

No .filter - .map en su lugar, y devuelva el objeto cambiado en caso de que la ID coincida, de modo que el nuevo objeto se coloque en el mismo lugar en la nueva matriz en el que estaba originalmente.

 const handleChange = (e) => { if (e.target.type !== "checkbox") { return; }; const newRoles = input.roles.map((role) => Number(role.id) !== Number(e.target.id) ? role : { ...role, checked: !role.checked } ); setInput((prevState) => { return { ...prevState, roles: newRoles }; }); }

A menos que el estado se actualice sincrónicamente antes de esto, lo que suena un poco improbable (pero no imposible), probablemente también puedas usar setInput({ ...input, roles: newRules }) en lugar de la devolución de llamada.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda