const [isLogged, setIsLogged] = useState(false);
const handleLogin = async (email, password) => {
try {
const { access_token } = await login(email, password);
const userDetails = await getUser(access_token);
// console.log(userDetails.name);
setUser(userDetails);
setError(null);
localStorage.setItem('accessToken', access_token);
setIsLogged(true); // -------------> not triggering
// console.log(isLogged);
navigate('/dashboard-react');
// console.log(localStorage.getItem('accessToken'));
} catch (error) {
setError(error.response.data.error);
}
};
我想要的setIsLoggedIn(true)
当句柄登录功能触发,但它总是显示假
1条答案
按热度按时间vsikbqxv1#
在React中,useState钩子不会同步设置新值,这意味着在使用setState函数设置新值后,新值不会立即可用。相反,React调度状态更新,并在需要时异步执行状态更改。
在您的控制台中。log新状态还不可用,但只能在下一个渲染周期中使用。
如果你想检查变量在setState之后是否发生了变化,你可以在useEffect钩子中检查它的变化。
钩子有两个参数。第一个参数是在条件下执行的函数。
第二个参数确定条件。更准确地说,这里传递了一个值数组,检查这些值是否发生了变化。如果检测到变化,则执行来自第一参数的函数。
事实上,这正是你试图Map的情况。