首页 > 解决方案 > React hooks setState 可能在 try catch 中出现错误

问题描述

我有一个函数来处理登录表单的提交,并且发生了一些非常奇怪的事情。如果我第一次正确输入所有字段,则一切正常,但如果我触发错误,那么每次运行函数时,错误将始终为真,即使在函数开始时将其设置为假。

const initialState = {
email: '',
password: '',
error: false,
success: false
};
const [state, setState] = useState(initialState);

const handleSubmit = e => {
e.preventDefault();
setState({ ...state, error: false, success: false });

props.form.validateFields(async (err, values) => {
  try {
    const { data, status } = await axios.post(vManager.path, values);

    if (data.token) {
      localStorage.setItem('token', data.token);
    }

    setState({ ...state, success: true });
  } catch (err) {
    setState({ ...state, error: true });
  }
});

};

标签: javascriptreactjsnext.jsreact-hooks

解决方案


你错过了一个state =>setState钩。

setState(state => ({ ...state, error: false, success: false }));

参考


推荐阅读