如何在回调中更新useState的值



我有一个名为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])

相关内容

  • 没有找到相关文章

最新更新