在useEffect中使用setState没有效果?

我做了一个简单的前端,为了省力,把登录成功的token保存到localStorage里,我在一个受保护的页面被访问之前在useEffect中判断是否存在token,如果存在就可以渲染,否则用react-router-domRedirect进行重定向。但是似乎出了一点问题。

export default function Dashboard() {
    let [isLogin, setIslogin] = React.useState(false);
    React.useEffect(() => {
        if (localStorage.getItem("token")) {
            setIslogin(true);
            console.log("ok");
        }
        console.log(isLogin);
        return () => {}
    }, [isLogin]);
    
    if (!isLogin) {
         return <Redirect
                 to={{
                    pathname: "/login",
                 }}
                /> 
    } else {
        return (
           <h1>这是一个受保护的页面</h1>
        );
    }
}

控制台的打印是

ok
false

请问哪里出了问题,或者有没有更好地解决方案?

阅读 7.6k
2 个回答

看上去应该是没问题,如果有token的话
应该是会打印

ok
false
ok
true

具体是出了什么问题 ?

另外这种情况完全没必要用hook

直接const isLogin = localStorge.getItem('token')就行了

通过localstorage判断有没有登陆就可以了啊 为什么要在useeffect里再set下呢?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题