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

141
Visualizações
Verifique condicionalmente el valor del contexto y luego navegue después de iniciar sesión en la misma llamada de función en React

En React, estoy usando la context API para configurar los datos del usuario o los errores devueltos por la solicitud de la API:

 // context const [currentUser, setCurrentUser] = useState("") const [error, setError] = useState("") async function login(credentials) { setError("") try { ...API request const data = await response.json() if(data.success) { setCurrentUser(data) } else { setError(data.error) } } catch (error) { setError("Something went wrong. Please try again.") } } <AuthContext.Provider value={login, currentUser, error}> {children} </AuthContext.Provider>

Luego en mi componente:

 //component const { login, currentUser, error } = useContext(AuthContext) const onSubmit = async (credentials) => { setLoading(true) await login(credentials) resetForm({}) setLoading(false) !error && navigate("/") } return ( ... )

Ahora, la función onSubmit le permite al usuario navigate a / incluso si hay un error establecido por el context ; esto se debe a que (creo) el error aún es null cuando se verifica y el componente no tiene la oportunidad de volver a procesar para obtener el valor más reciente.

¿Cuál sería el mejor enfoque para evitar este comportamiento? ¿Debo manejar el error localmente en el componente y no en el context ? En caso afirmativo, ¿cuál sería la mejor manera de hacerlo en mi escenario?

¡Gracias!

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

0

solución rápida

Por supuesto, hay otras formas de hacer esto, pero la que no cambiaría mucho su estructura actual es cambiar la función onSubmit para que no haga la redirección allí:

 const onSubmit = async (credentials) => { setLoading(true) await login(credentials) resetForm({}) setLoading(false) }

Cree un useEffect que haría la redirección, pero en función de si hay un usuario o no:

 useEffect(()=>{ if(currentUser){ navigate("/") } },[currentUser])

Y sí, cuando está llamando a !error && navigate("/") todavía no se ha vuelto a procesar y, por lo tanto, error sigue siendo igual a "" , por lo que la redirección se produce de inmediato.

De otra manera

Suponiendo que el proceso de inicio de sesión se maneje en un solo lugar (que es el caso en la mayoría de los escenarios), no es necesario tener la función de inicio de login y el estado de error como parte del contexto. El contexto debe exportar solo setCurrentUser y currentUser .

 <AuthContext.Provider value={currentUser, setCurrentUser}> {children} </AuthContext.Provider>

El inicio de sesión y los errores relacionados con el inicio de sesión se manejarían dentro de la página de inicio de sesión y llamaría a setCurrentUser para actualizar el contexto de otros componentes:

 const {currentUser, setCurrentUser} = useContext(AuthContext)

Y usaría el mismo useEffect que el anterior para hacer la redirección cuando hay currentUser .

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