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

85
Visualizações
SetState de un objeto de matriz en React

Así que he estado trabajando en esto por un tiempo, lo que estoy tratando de hacer es cambiar un valor marcado al hacer clic en la casilla de verificación.

Mi estado inicial se ve así:

 const [todoList, setTodoList] = useState({ foundation: { steps: [ { key: "1", title: "setup virtual office", isDone: false }, { key: "2", title: "set mission and vision", isDone: false }, { key: "3", title: "select business name", isDone: false }, { key: "4", title: "buy domain", isDone: false }, ], }, discovery: { steps: [ { key: "1", title: "create roadmap", isDone: false }, { key: "2", title: "competitor analysis", isDone: false }, ], } });

y mi mapa y la función onClick (updateCheckFoundation funciona cuando se hace clic en la casilla de verificación)

 {todoList.foundation.steps.map((item) => { return ( <div> <input type="checkbox" defaultChecked={item.isDone} onClick={(event)=> updateCheckFoundation({ isDone:event.target.checked, key:item.key })}/> <span>{item.title}</span> </div> ); })}

Entonces, ¿cómo puedo actualizar todoList usando setState?

mi código (función updateCheckFoundation) es así y no funciona :( :

 const updateCheckFoundation = ({isDone, key}) => { const updateTodoList = todoList.foundation.steps.map((todo)=> { if(todo.key === key){ return { ...todo, isDone }; } return todo; }); setTodoList(updateTodoList); }
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Tema

Su devolución de llamada updateCheckFoundation no mantiene el estado invariable y, de hecho, descarta todo menos la matriz de estado de pasos de foundation.steps .

 const updateCheckFoundation = ({isDone, key}) => { const updateTodoList = todoList.foundation.steps.map((todo)=> { if(todo.key === key){ return { ...todo, isDone }; } return todo; }); setTodoList(updateTodoList); // <-- only the state.foundation.steps array!! }

Solución

En los componentes de función, al usar las funciones de actualización de estado de useState , debe manejar el estado de fusión ( el estado raíz ) y el estado anidado, usted mismo, manualmente.

 const updateCheckFoundation = ({ isDone, key }) => { setTodoList(state => ({ ...state, // <-- shallow copy state object foundation: { ...state.foundation, // <-- shallow copy steps: state.foundation.steps.map(todo => todo.key === key ? { ...todo, isDone } : todo) }, })); }
about 4 years ago · Juan Pablo Isaza 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