tengo una función llamada inicio de sesión que redirige al usuario a la página principal si todo estaba bien. Luego, en la página principal, quiero obtener información del usuario con useEffect usando el token que se almacenó cuando el usuario inició sesión, pero no pasa nada. Solo cuando actualizo la página obtengo los datos.
función de inicio de sesión
export const login = ({ email, password, history }) => { return async (dispatch) => { try { const response = await fetch("http://localhost:5000/api/login", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ email, password, }), }); const data = await response.json(); if (data.status === 200) { localStorage.setItem("userToken", data.user); history.push("/"); } else { dispatch( setNotification({ variant: "error", message: data.message, }) ); } } catch (e) { console.log(e.message); } }; };recuperar la función de usuario
export const fetchUser = () => { return async (dispatch) => { try { const response = await fetch("http://localhost:5000/userInfo", { headers: { "x-access-token": localStorage.getItem("userToken"), }, }); const data = await response.json(); dispatch(setUser({ id: data.id, fullname: data.fullname, email: data.email })) } catch (error) {} }; };useEffect en mi página principal
useEffect(() => { dispatch(fetchUser()); }, []);función de fondo
module.exports.getCurrentUser = async (req, res) => { const token = req.headers["x-access-token"]; try { const verifyToken = jwt.verify(token, "123"); const user = await User.findOne({ email: verifyToken.email }); return res.json({ id: user._id, fullname: user.fullname, email: user.email }) } catch (error) {} };El segundo parámetro de useEffect le indica cuándo debe ejecutarse. Solo se ejecuta si uno de los valores de la matriz ha cambiado. Dado que pasa una matriz vacía, ninguno de los valores en ella ha cambiado.
Esto supone que su aplicación probablemente comience en '/', luego detecta que no hay ningún usuario, por lo que cambia a la pantalla de inicio de sesión. Cuando vuelve a la raíz, solo ejecuta useEffect si algo en la matriz ha cambiado desde el renderizado anterior.
Tal como está, isMounted no tiene mucho sentido. Esto podría ser simplemente:
useEffect(() => { dispatch(fetchUser()); });Está llamando a setUser , pero ¿qué está llamando a su función de inicio de sesión?