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回答

双越

2023-05-06

username非真,不会到 list 页面,而会跳转到登录页

0
6
双越
回复
见信
这很正常,内容多,时间久,我都会忘记的。
2023-05-07
共6条回复

React18+ Nest.js 全栈开发仿问卷星项目

React18+TS4+Antd5+Next.js13 ,B端+C 端,完整业务

395 学习 · 290 问题

查看课程