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

101
Visualizações
React no puede establecer una variable dentro de la función onClick

Estoy tratando de establecer una variable dentro de un evento onClick. Estoy configurando los mensajes de error en la variable.

 const handleEdit = (e) => { e.preventDefault(); if (edit_user.email == "") { setEditUserError({ email: "Please enter an email!" }) } if (edit_user.company == "") { setEditUserError({ ...edit_user_error, company: "Please enter company!" }) }

Y estoy mostrando el error en el formulario como <span className="text-danger">{edit_user_error.company}</span>

El problema es que cuando todos los campos están vacíos y cuando hago clic en el botón, solo se muestra el último mensaje. Cuando dejo un campo vacío y luego hago clic en el botón Enviar, funciona correctamente. Intenté console.log(edit_user_error) pero se muestra vacío. ¿Qué estoy haciendo mal? Por favor ayuda

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

0

Esto se debe a las actualizaciones de estado por lotes. React intentará reducir los renderizados minimizando las actualizaciones de estado. Puede usar la actualización del estado funcional para solucionar esto:

 if (edit_user.email == "") { setEditUserError({ email: "Please enter an email!" }); } if (edit_user.company == "") { // this callback gets executed only when previous state updates are done setEditUserError((prev) => ({ ...prev, company: "Please enter company!" })); }

Para borrar los errores cuando los campos son válidos:

 const getErrors = () => { return { ...(!edit_user.email ? { email: "Please enter an email!" } : {}), ...(!edit_user.company ? { company: "Please enter company!" } : {}), }; }; const handleEdit = (e) => { e.preventDefault(); setEditUserError(getErrors()); };
about 4 years ago · Juan Pablo Isaza Relatório

0

Las actualizaciones de estado de reacción son asíncronas, lo que significa que no se ejecutarán de inmediato. Por lo tanto, al ejecutar varios setState en el mismo estado, no puede esperar que el estado de la primera llamada a setState se actualice antes de que ocurra la segunda llamada a setState .

En resumen, React está ignorando sus llamadas anteriores a setState porque suceden una tras otra.

La solución es poner la actualización en una sola llamada:

 const handleEdit = (e) => { e.preventDefault(); let errors = {}; if (edit_user.email == "") { errors.email = "Please enter an email!" } if (edit_user.company == "") { errors.company = "Please enter company!" } // and then we call state with all the values, only once setEditUserError(errors);
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