单击后退按钮后 useEffect 显示双重结果
useEffect shows double result after back button click
我有一个程序,我在其中使用 useEffect 来获取数据库中的产品。我将 useEffect 与空数组一起用作依赖项,因此仅在呈现组件时才加载数据。问题是,如果我在使用浏览器的后退按钮后立即更改页面,组件会显示双倍的产品。
代码
useEffect(() => {
dispatch(fetchProducts());
}, []);
由于您 dispatch
一个 redux 操作,您似乎将获取的产品存储在 redux
上。 redux 状态不受路由更改的影响,并存储在整个应用程序中,直到手动清除。
所以你可以做的是,你可以在你的 reducer 中定义另一个名为 cleanUpProducts
的动作,在这个函数中,你可以清理 redux 商店中存储的产品。
之后,您可以在 useEffect
(相当于 componentWillUnmount
)挂钩的 return
函数中分派此操作,例如:
useEffect(() => {
dispatch(fetchProducts());
return () => {
dispatch(cleanUpProducts());
}
}, []);
我有一个程序,我在其中使用 useEffect 来获取数据库中的产品。我将 useEffect 与空数组一起用作依赖项,因此仅在呈现组件时才加载数据。问题是,如果我在使用浏览器的后退按钮后立即更改页面,组件会显示双倍的产品。
代码
useEffect(() => {
dispatch(fetchProducts());
}, []);
由于您 dispatch
一个 redux 操作,您似乎将获取的产品存储在 redux
上。 redux 状态不受路由更改的影响,并存储在整个应用程序中,直到手动清除。
所以你可以做的是,你可以在你的 reducer 中定义另一个名为 cleanUpProducts
的动作,在这个函数中,你可以清理 redux 商店中存储的产品。
之后,您可以在 useEffect
(相当于 componentWillUnmount
)挂钩的 return
函数中分派此操作,例如:
useEffect(() => {
dispatch(fetchProducts());
return () => {
dispatch(cleanUpProducts());
}
}, []);