【发布时间】:2023-03-14 03:53:01
【问题描述】:
我有一个名为登录的功能,如果一切正常,它会将用户重定向到主页。然后,在主页上,我想使用用户登录时存储的令牌使用 useEffect 获取一些用户信息,但没有任何反应。只有当我刷新页面时,我才能得到数据。
登录功能
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);
}
};
};
获取用户函数
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(() => {
dispatch(fetchUser());
}, []);
后端功能
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) {}
};
【问题讨论】:
-
您的
isMounted有什么意义?每次测试值之前都将其设置为 true -
我正在使用它来解决我遇到的错误。
标签: javascript reactjs react-redux