我有一个名为LogiUser的函数,它在单击登录按钮时启动。当用户通过身份验证时,setUser会使用用户的电子邮件id进行身份验证,但它不会更新它并给出以前的值,即";登录用户";在console.log中。我尝试过使用Effect,但上面写着React Hook;useEffect";不能在回调中调用。
const [user, setUser] = useState("Logged in User");
const LoginUser = () => {
Axios.post("http://localhost:4000/api/login", {
userID_Login: userIdLogin,
password_Login: passwordLogin
}).then((res) => {
if (!res.data.recordsets) {
setUser(res.data.message);
alert("Either you are not authorised or UserId/Password not correct. Plesae contact administrator.")
} else {
setUser(res.data.recordset[0].Email);
console.log(user);
navigate("/Home");
}
});
};
setState
方法是异步的。这就是console.log
将为您提供状态的上一个值的原因。换句话说:setState
将调度状态更改,而不是立即执行。
您必须将useEffect
放置在回调之外,并侦听user
的更改。
...
useEffect(() => {
console.log(user)
// Do what you want with user
}, [user])
const LoginUser = () => {
...
setState
是异步函数。
const [user, setUser] = useState("Logged in User");
useEffect(() => {
console.log('user', user)
// your logic here
}, [user])