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

178
Visualizações
¿Cómo puedo configurar el estado en función de otro estado en el componente funcional?

Construyo una aplicación de tareas simples con una reacción con una variedad de tareas pendientes:

 const todos = [description: "walk dog", done: false]

Yo uso los siguientes dos estados:

 const [alltodos, handleTodos] = useState(todos); const [opencount, countOpen] = useState(alltodos.length);

Esta es la función que cuenta los todos abiertos:

 const countTodos = () => { const donetodos = alltodos.filter((item) => { return !item.done; }); countOpen(donetodos.length); };

Cuando trato de agregar un nuevo todo, también quiero actualizar el estado de cuenta countTodos opencount

 const submitTodo = (event) => { event.preventDefault(); const data = { description: todo, done: false, }; handleTodos([...alltodos, data]); console.log(alltodos); countTodos(); };

Esto no funciona como se esperaba, cuando ejecuto console.log(alltodos) mostrará una matriz vacía. La función en sí funciona, pero parece tener un "retraso", supongo que en función de la naturaleza asíncrona del useState .

Traté de pasar la función countTodos como una devolución de llamada como esta, ya que he visto algo similar en los componentes basados en clases.

 handleTodos([...alltodos, data], () => { countTodos(); });

Obtuve el siguiente error:

 Warning: State updates from the useState() and useReducer() Hooks don't support the second callback argument. To execute a side effect after rendering, declare it in the component body with useEffect().

¿Como puedó resolver esté problema? ¿Cuál es la mejor forma de actualizar el estado en función de otro estado?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Creo que deberías usarEffect, (claramente indicado en el mensaje de registro). esto es un ejemplo :

 useEffect(()=>{ const donetodos = alltodos.filter((item) => { return !item.done; }); countOpen(donetodos.length); //countTodos(); },[alltodos]];

Puede consultar la documentación: https://reactjs.org/docs/hooks-effect.html

Aquí hay un ejemplo: https://codesandbox.io/s/react-hooks-useeffect-forked-4sly8

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