useLoadUserData与退出登录冲突
来源:12-21 根据用户登录状态动态跳转页面-使用自定义Hook统一处理
见信
2023-05-06
import { useState, useEffect } from 'react'
import { useRequest } from 'ahooks'
import { getUserInfoService } from '../services/user'
import useGetUserInfo from './useGetUserInfo'
import { loginReducer } from '../store/userReducer'
import { useDispatch } from 'react-redux'
const useLoadUserData = () => {
const [waitingUserData, setWaitngUserData] = useState(true)
const dispatch = useDispatch()
const { run } = useRequest(
async () => {
const data = await getUserInfoService()
return data
},
{
manual: true,
onSuccess(result) {
const { username, nickname } = result
dispatch(loginReducer({ username, nickname }))
},
onFinally() {
setWaitngUserData(false)
},
}
)
const { username } = useGetUserInfo()
useEffect(() => {
if (username) {
setWaitngUserData(false)
return
}
run()
}, [username])
return { waitingUserData }
}
export default useLoadUserData
useEffect内的这段逻辑判断username非真的时候会去调用请求获取userinfo, 刷新页面
1.username非真,执行EffectCallback,触发run,获取到userinfo后,派发loginReducer,将userinfo存入store中,username转为真
2. 此时点退出登录,派发logoutReducer,设置userinfo的state为initialState,修改了username,产生了副作用,执行EffectCallback,此时username非真,重复步骤1,自动回到了 manage/list页面了呀
写回答
1回答
-
username非真,不会到 list 页面,而会跳转到登录页
062023-05-07
相似问题