reactjs setIsLoggedin未触发为true

q8l4jmvw  于 2023-04-29  发布在  React
关注(0)|答案(1)|浏览(89)
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)当句柄登录功能触发,但它总是显示假

vsikbqxv

vsikbqxv1#

在React中,useState钩子不会同步设置新值,这意味着在使用setState函数设置新值后,新值不会立即可用。相反,React调度状态更新,并在需要时异步执行状态更改。
在您的控制台中。log新状态还不可用,但只能在下一个渲染周期中使用。
如果你想检查变量在setState之后是否发生了变化,你可以在useEffect钩子中检查它的变化。

import React, { useState, useEffect } from 'react';


const [isLogged, setIsLogged] = useState(false);

useEffect(() => {
  console.log('isLogged state updated:', isLogged);
}, [isLogged]);

钩子有两个参数。第一个参数是在条件下执行的函数。
第二个参数确定条件。更准确地说,这里传递了一个值数组,检查这些值是否发生了变化。如果检测到变化,则执行来自第一参数的函数。
事实上,这正是你试图Map的情况。

相关问题