es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La etiqueta de React Router no está redirigiendo con el estado.

La aplicación debería redirigir a /dashboard cuando el usuario no sea nulo. El usuario está nulo en la primera representación, pero useEffect() debería recoger y almacenar los datos del usuario desde el almacenamiento local. Luego, el operador ternario debería activar y redirigir a la página de dashboard. Pero no está haciendo eso. Simplemente sigue mostrando la página de inicio de sesión en /login cada vez que la actualizo, incluso si hay datos en el almacenamiento local.

¿Qué estoy haciendo mal o cómo puedo solucionarlo?

const App = () => {
    const [user, setUser] = useState(null)

useEffect(() => {
    const loggedUserJSON = window.localStorage.getItem('loggedUser')

    if (loggedUserJSON) {
        const user = JSON.parse(loggedUserJSON)
        setUser(user)
        noteService.setToken(user.token)
    }
}, [])

return (
    <router>
        <switch>
            <route exact="" path='/'>
                {user
                    ? <redirect to='/dashboard'></redirect>
                    : <redirect to='/login'></redirect>
                }
            </route>
            <route exact="" path='/login'>
                <login></login>
            </route>
            <route exact="" path='/dashboard'>
                <dashboard></dashboard>
            </route>
        </switch>
    </router>
)


Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el gancho useEffect() no se está activando cuando se refresca la página. Para solucionarlo, puede agregar una matriz vacía como segundo argumento al gancho useEffect(). Esto garantizará que se active el gancho cuando se refresque la página.

    useEffect(() => {
        const loggedUserJSON = window.localStorage.getItem('loggedUser')
    
        if (loggedUserJSON) {
            const user = JSON.parse(loggedUserJSON)
            setUser(user)
            noteService.setToken(user.token)
        }
    
    }, []) // Agregue una matriz vacía aquí
    

Comments are closed.