【发布时间】:2020-08-05 14:01:17
【问题描述】:
有一个个人资料页面。每次我访问我的个人资料时,这里都会加载props.profile()。它更新 Redux 存储并基本上将用户添加到状态。还有一个logout 按钮。注销后重定向到主页,action 和 reducer 清除 Redux 状态并从 localStorage 中删除令牌。
如果我转到我的个人资料页面并在加载个人资料之前退出,那么即使我已经点击了logout 按钮,props.profile() 仍然会加载。喜欢in this image。
我认为我的useEffect 有问题,因为单击logout 按钮时组件没有卸载。
useEffect(() => {
props.profile();
return;
}, [props]);
还有一个return;,但我不知道该怎么办。
期望的结果:如果我点击注销,我希望组件卸载并清除状态。
注销操作:
export const logout = () => (dispatch) => {
localStorage.removeItem("token");
dispatch({
type: LOGOUT,
});
};
注销减速器:
case LOGOUT:
return {
user: {},
authenticated: false,
loading: false,
error: null,
token: null,
};
【问题讨论】:
-
useEffect的return函数将用于任何清理 - reactjs.org/docs/hooks-effect.html#effects-with-cleanup -
只要你转到
profile page,它就会调用useEffect,而且它的操作非常快,我认为你不能在它被调用之前注销。 -
我将
logout按钮放在配置文件页面上用于测试目的,我可以在props.profile()运行之前快速单击它。然后它让我退出,但props.profile()仍然在后面运行。
标签: javascript reactjs redux