如何使组件卸载中调度的 redux 动作在上一页 useEffect 之前到达商店?
How to make redux action dispatched in component unmount reach the store before previous page useEffect?
我有 2 个反应组件:
const PageA = () => {
useEffect(()=>{
doXXXX()
}, [])
return ....
}
const PageB = () => {
useEffect(()=>{
return () => dispatch(SomeReduxAction())
}, [])
return ....
}
当用户从页面 A 转到页面 B,然后在历史记录中从页面 B 返回到页面 A。 Page A 中的 useEffect 块在 SomeReduxAction
到达当 PageB 卸载时调度的 redux 存储之前运行。这会导致错误。有没有办法让 SomeReduxAction
在 PageA 运行 useEffect 之前到达 redux 存储?
因为分派动作是异步的。并且在组件卸载时触发,你不能等待它在调用端完成。
但是你可以在 Redux Store 中监听状态变化。使用状态作为useEffect
的依赖,这样当状态改变时,useEffect
会再次执行。然后你可以像doXXXX()
函数一样决定是否执行代码。
例如
const PageA = () => {
const someReduxActionStateSlice = useSelector(state => state.someReduxActionStateSlice);
useEffect(()=>{
if(someReduxActionStateSlice === condition) {
doXXXX()
}
}, [someReduxActionStateSlice])
return ....
}
const PageB = () => {
useEffect(()=>{
return () => dispatch(SomeReduxAction())
}, [])
return ...
}
我有 2 个反应组件:
const PageA = () => {
useEffect(()=>{
doXXXX()
}, [])
return ....
}
const PageB = () => {
useEffect(()=>{
return () => dispatch(SomeReduxAction())
}, [])
return ....
}
当用户从页面 A 转到页面 B,然后在历史记录中从页面 B 返回到页面 A。 Page A 中的 useEffect 块在 SomeReduxAction
到达当 PageB 卸载时调度的 redux 存储之前运行。这会导致错误。有没有办法让 SomeReduxAction
在 PageA 运行 useEffect 之前到达 redux 存储?
因为分派动作是异步的。并且在组件卸载时触发,你不能等待它在调用端完成。
但是你可以在 Redux Store 中监听状态变化。使用状态作为useEffect
的依赖,这样当状态改变时,useEffect
会再次执行。然后你可以像doXXXX()
函数一样决定是否执行代码。
例如
const PageA = () => {
const someReduxActionStateSlice = useSelector(state => state.someReduxActionStateSlice);
useEffect(()=>{
if(someReduxActionStateSlice === condition) {
doXXXX()
}
}, [someReduxActionStateSlice])
return ....
}
const PageB = () => {
useEffect(()=>{
return () => dispatch(SomeReduxAction())
}, [])
return ...
}