Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
360 views
in Technique[技术] by (71.8m points)

reactjs - state not updating in react hooks

i have created a login form where user need to input his email id and OTP. below is my code -

import { useState } from 'react';
import axios from '../api/axios';

const useLogin = () => {
    const [user, setUser] = useState(false);

    const auth = async (value, OTP) => {

        let config = {
            method: 'POST',
            url: '/api/user/generateToken',
            headers: {
                Authorization: 'value'
            },
            data: {
                username: value,
                password: OTP
            }
        };

        try {
            const response = await axios(config);
            if (response.data.Status === "Failure") {
                throw response.data.Message;
            } else {
                setUser(true);
                return { status: response.data.Status, isAuth: user }
            }
        } catch (err) {
            setUser(false);
            return { status: undefined, message: err, isAuth: user };
        }

    }

    return { auth, user };


}

export default useLogin

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

That's because by the time you returning your isAuth value the new user value is not set yet. you need to know that React setState is asynchronous function. just use the the boolean itself directly like this:

setUser(true);
return { status: response.data.Status, isAuth: true }

or in case of a rejection:

setUser(false);
return { status: undefined, message: err, isAuth: false };

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...