Reactjs 对用户身份验证使用状态挂钩作出反应
我在学习反应,我在用passport js进行谷歌认证 所以当用户登陆我的页面时,他们没有经过身份验证,所以我有一个按钮让他们通过谷歌登录。一旦他们登录,我会用他们的名字将他们重定向到我的主页,简单地说他们已登录,它会显示一个注销按钮 现在这就是问题所在,在我将他们注销后,我将我的状态设置回false,但它会将他们的姓名和登录消息呈现回主页 我用spread操作符修复了它,但我不知道为什么它能工作。我似乎不能把我的头围绕着它 有人能分享一下吗?干杯Reactjs 对用户身份验证使用状态挂钩作出反应,reactjs,Reactjs,我在学习反应,我在用passport js进行谷歌认证 所以当用户登陆我的页面时,他们没有经过身份验证,所以我有一个按钮让他们通过谷歌登录。一旦他们登录,我会用他们的名字将他们重定向到我的主页,简单地说他们已登录,它会显示一个注销按钮 现在这就是问题所在,在我将他们注销后,我将我的状态设置回false,但它会将他们的姓名和登录消息呈现回主页 我用spread操作符修复了它,但我不知道为什么它能工作。我似乎不能把我的头围绕着它 有人能分享一下吗?干杯 import { useState,
import { useState, useEffect } from 'react';
import * as api from '../api/index';
import Header from './Header';
function Home() {
const [user, setUser] = useState({
user: {},
error: null,
authenticated: false
});
useEffect(() => {
const fetchLoggedInUser = async () => {
try {
const { data } = await api.loginSucess();
setUser({ authenticated: true, user: data.user });
} catch (error) {
setUser({ authenticated: false, error: 'Failed to authenticate user' });
}
};
fetchLoggedInUser();
}, []);
const handleNotAuthenticated = () => {
setUser(...user, { authenticated: false });
};
return (
<>
<Header
authenticated={user.authenticated}
handleNotAuthenticated={handleNotAuthenticated}
/>
<div>
{!user.authenticated ? (
'Welcome'
) : (
<div>
<h1>You have sucessfully logged in</h1>
<h2>Welcome {user.user.firstName}</h2>
</div>
)}
</div>
</>
);
}
export default Home;
从'react'导入{useState,useffect};
从“../api/index”导入*作为api;
从“./头”导入头;
函数Home(){
const[user,setUser]=useState({
用户:{},
错误:null,
认证:假
});
useffect(()=>{
const fetchLoggedInUser=async()=>{
试一试{
const{data}=await api.loginsAccess();
setUser({authenticated:true,user:data.user});
}捕获(错误){
setUser({authenticated:false,错误:'Failed to authenticated user'});
}
};
fetchLoggedInUser();
}, []);
const handlenoauthenticated=()=>{
setUser(…user,{authenticated:false});
};
返回(
{!user.authenticated(
“欢迎”
) : (
您已成功登录
欢迎{user.user.firstName}
)}
);
}
导出默认主页;
setUser
获取一个对象,但您正在将一个对象(user
)直接传播到其中,这应该是一个语法错误。你的意思是写setUser({…user,authenticated:false})
?不过我编译客户端代码时没有出错。真奇怪。当我将代码固定为setUser({…user,authenticated:false})时,当我注销时,我的主页将继续使用登录消息重新呈现