После проверки jwt изменение состояния не сохраняется

#node.js #reactjs #mongodb #express

#node.js #reactjs #mongodb #выразить

Вопрос:

Итак, в интерфейсе я использую эту функцию, чтобы пользователь мог войти в систему, если у них есть эта функция, которая работает только во время входа в систему, и после того, как пользователи просто переходят на другую страницу на сайте, она сбрасывает значения состояния userData на undefined, ссылка api «http://localhost:5000/users/isTokenValid» возвращает либо true, либо false

 const [adminData, setAdminData] = useState({
        token: undefined,
        user: undefined,
    });
    const [authData, setAuthData] = useState(undefined);

    const [userData, setUserData] = useState({
        token: undefined,
        user: undefined,
    });

    useEffect(() => {
        const checkLoggedIn = async () => {
            let token = localStorage.getItem('auth-token');

            if (token === null) {
                localStorage.setItem('auth-token', '');
                token = '';
            }

            const tokenRes = await axios.post(
                'http://localhost:5000/users/isTokenValid',
                null,
                { headers: { 'x-auth-token': token } },
            );
            if (tokenRes.data) {
                const userRes = axios.get('http://localhost:5000/users/', {
                    headers: { 'x-auth-token': token },
                });
                setUserData({
                    token,
                    user: userRes.data,
                });
            }
        };

        checkLoggedIn();
    }, []);
 
 return (
        <UserContext.Provider value={{ userData, setUserData }}>
            <AdminContext.Provider value={{ adminData, setAdminData }}>
                <AuthContext.Provider value={{ authData, setAuthData }}>
                    <Routes />
                </AuthContext.Provider>
            </AdminContext.Provider>
        </UserContext.Provider>
    );
 

Ответ №1:

Я не добавлял await .

         if (tokenRes.data) {
            const userRes = await axios.get('http://localhost:5000/users/', {
                headers: { 'x-auth-token': token },
            });
            setUserData({
                token,
                user: userRes.data,
            });
        }