Javascript React useffect和componentWillUnmount with Redux
有一个个人资料页。这里的Javascript React useffect和componentWillUnmount with Redux,javascript,reactjs,redux,Javascript,Reactjs,Redux,有一个个人资料页。这里的props.profile()。它更新Redux存储,并基本上将用户添加到状态。还有一个注销按钮。注销后,它会重定向到主页,操作和还原程序会清除Redux状态并从localStorage中删除令牌 如果我在配置文件加载之前转到我的配置文件页面并注销,那么即使我已经单击了注销按钮,props.profile()仍然会加载。喜欢 我认为我的useffect有问题,因为单击logout按钮时组件没有卸载 useEffect(() => { props.pr
props.profile()。它更新Redux存储,并基本上将用户添加到状态。还有一个注销
按钮。注销后,它会重定向到主页,操作和还原程序会清除Redux状态并从localStorage中删除令牌
如果我在配置文件加载之前转到我的配置文件页面并注销,那么即使我已经单击了注销按钮,props.profile()
仍然会加载。喜欢
我认为我的useffect
有问题,因为单击logout
按钮时组件没有卸载
useEffect(() => {
props.profile();
return;
}, [props]);
有一个返回代码>也是,但我不知道该怎么办
所需结果:如果单击注销,我希望卸载组件并清除状态
注销操作:
export const logout = () => (dispatch) => {
localStorage.removeItem("token");
dispatch({
type: LOGOUT,
});
};
注销还原程序:
case LOGOUT:
return {
user: {},
authenticated: false,
loading: false,
error: null,
token: null,
};
无论useffect
中的return
如何,组件总是卸载。没有发生的是卸载时调用的某些内容
尝试将代码更改为以下内容:
useEffect(() => {
props.profile();
return () => props.logout(); //logout should be your redux action
}, [props.profile, props.logout]); // Reduce triggers of this method by not leaving `props` here
useffect
的return
功能将用于任何清理-只要你进入profile页面
它就会调用useffect
,它的操作非常快,我想你不能在调用它之前注销。为了测试的目的,我在profile页面上放置了logout
按钮可以在运行props.profile()
之前快速单击它。然后它将我注销,但props.profile()
仍在之后运行。问题仍然存在。我转到我的个人资料页面,它会加载我的个人资料页面,但是如果我在加载props.profile()
之前单击logout
按钮,那么即使在注销之后,它也会加载个人资料并将数据放入Redux存储。@David我已经对代码添加了一些更改,你能再试一次吗?@David如果你的页面是通过导航库挂载的,那么在你交换页面时,该页面很有可能没有真正卸载。是的,我使用react router dom和。更新后的代码是:我在/profile上,但如果我转到/feed,它会自动将我注销。那么我应该如何卸载它呢?因为你有这个[props.profile,props.logout]
。即使是对配置文件(prop.profile)的更改,也可能会触发注销。