React hooks setState возможная ошибка в try catch - PullRequest
0 голосов
/ 10 марта 2019

У меня есть функция для обработки формы входа, и происходит нечто действительно странное.Если я правильно введу все поля с первой попытки, все будет работать нормально, но если я вызову ошибку, то каждый раз, когда я запускаю функцию, ошибка всегда будет истинной, даже если в начале функции она будет установлена ​​как ложная.

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 });
  }
});

};

Ответы [ 2 ]

2 голосов
/ 10 марта 2019

Вы пропустили state => внутри setState крючка.

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

Ссылка

0 голосов
/ 10 марта 2019

Решение, представленное @Keno Clayton works. И тогда я нашел объяснение по документации React

состояние - это ссылка на состояние компонента во время применения изменения. Это не должно быть напрямую видоизменено. Вместо этого изменения должны быть представлены путем создания нового объекта на основе входных данных от состояния и реквизита. Например, предположим, что мы хотели увеличить значение в состоянии на props.step:

...