【问题标题】:Reactjs - How can I create a Boolean based off a successful axios POST?Reactjs - 如何根据成功的 axios POST 创建布尔值?
【发布时间】:2021-01-30 00:04:12
【问题描述】:

我有一个调度,用于确认用户是否已登录。现在,它当前根据登录字段中的任何输入发送数据。这意味着,您可以输入错误的用户名和密码,并且该调度将充当一切,就好像凭据是正确的一样。

我只想在用户成功输入正确的用户名和密码后使用我的调度。这是我的代码!

export default function SignIn() {
    const history = useHistory();
    const initialFormData = Object.freeze({
        email: '',
        password: '',
    });

    const [formData, updateFormData] = useState(initialFormData);

    const handleChange = (e) => {
        updateFormData({
            ...formData,
            [e.target.name]: e.target.value.trim(),
        });
    };

    const dispatch = useDispatch();

    const handleSubmit = (e) => {
        e.preventDefault();
        console.log(formData);

        axiosInstance
            .post(`auth/token/`, {
                grant_type: 'password',
                username: formData.email,
                password: formData.password,

            })
            .then((res) => {
                console.log(res);
                localStorage.setItem('access_token', res.data.access_token);
                localStorage.setItem('refresh_token', res.data.refresh_token);
                history.push('/');
                window.location.reload();
            });

        dispatch(login({
            name: formData.email,
            password: formData.password,
            loggedIn: true,
        }))
    };

以下是问题的重点,我想仅在用户成功登录时触发我的调度。目前,任何文本字段输入都会触发调度。

        dispatch(login({
            name: formData.email,
            password: formData.password,
            loggedIn: true,

我在想一个为成功的 POST HTTP 200 请求提供真假的布尔值?如果有更简单的方法,那么我想知道:)

【问题讨论】:

    标签: javascript reactjs axios


    【解决方案1】:

    将您的调度放在 then 块中并添加一个 catch 方法来处理错误

        const handleSubmit = (e) => {
        e.preventDefault();
        console.log(formData);
    
        axiosInstance
            .post(`auth/token/`, {
                grant_type: 'password',
                username: formData.email,
                password: formData.password,
    
            })
            .then((res) => {
                console.log(res);
                localStorage.setItem('access_token', res.data.access_token);
                localStorage.setItem('refresh_token', res.data.refresh_token);
                history.push('/');
                window.location.reload();
                dispatch(login({
                 name: formData.email,
                 password: formData.password,
                 loggedIn: true,
               }))
            })
            .catch(err => {
               // HANDLE ERROR HERE
            }
    };
    

    【讨论】:

    • 我还有一个问题,你建议我在错误函数中添加什么?
    • 理想情况下,您会收到来自服务器的 400 状态代码。根据其配置方式,您可能会收到一条错误消息。因此,您可以向用户显示该错误消息。即“电子邮件不存在”、“密码不正确”
    猜你喜欢
    • 2015-12-20
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 2019-11-21
    • 1970-01-01
    • 2019-08-25
    • 2022-01-04
    • 2018-07-06
    相关资源
    最近更新 更多