169 похожих чатов

Доброе утро, я новичок в React Передо мной стоит задача -

обработка ошибки 422 с сервера и отображение в UI.

Использую общий useApi с axios.

const [error, setError] = useState<ApiError | null>(null);

catch (error: unknown) {
if (error instanceof AxiosError && error.response) {
if (error.response.status === 401) {
localStorage.removeItem(LOCAL_STORAGE_TOKEN_KEY);
location.reload();
}

setError({ code: error.response.status, text: error.response.data.errors });
} else {
setError({ code: 520, text: 'an unexpected error occurred.' });
}
setData(null);
setIsLoading(false);
}

Вот мой код где я пытаюсь словить ошибку в state и потом передаю в другие компоненты.

Проблема в том что при первом вызове Api с ошибкой значение error равно null, при втором вызове Api setError отрабатывает нормально и мой error равен ошибке.

Я так понимаю проблема в асинхронностю в работе useState. Но чем его заменить в моей ситуации?

Буду благодарен за совет/помощь.

6 ответов

7 просмотров

Да тут все верно написано и не сказать что новичек. Стейт не асинхронный, у него такая реализация что изменения видны не сразу, забыл уже как это все называется. Тебе надо просто правильно выводить ошибку на экран

Sultan- Автор вопроса
Максим
Да тут все верно написано и не сказать что новичек...

Правильно ошибку на экран не выведу, поскольку получу null от useApi Замкнутый круг выходит 😄

Sultan
Правильно ошибку на экран не выведу, поскольку пол...

Покажи полностью свой компонент с запросом и ретурном jsx

Sultan- Автор вопроса

Он довольно большой const handleSubmit = async (values: FormValues) => { let orgName = ''; let orgNumber = ''; if (enterpriseInfo && !enterpriseInfo.id) { orgName = enterpriseInfo.name || ''; orgNumber = enterpriseInfo.orgNumber || ''; } const payload = { firstName: values.firstName, lastName: values.lastName, phoneCode: selectedPhoneCode?.key || '', phoneNumber: values.phoneNumber, email: values.email, enterpriseId: enterpriseInfo?.id || null, createEnterprise: { orgName: orgName, orgNumber: orgNumber, }, type: customerType, }; const response = await createCustomerRequest.execute( ${process.env.REACT_APP_API_BASE_URL}/v1/customer, 'POST', { customer: payload, generateAndSendPassword: sendPassword, }, ); if (createCustomerRequest.error) { const errorText = createCustomerRequest.error.text; setErrors({ firstName: errorText?.firstName?.[0] || '', lastName: errorText?.lastName?.[0] || '', phoneCode: errorText?.phoneCode?.[0] || '', phoneNumber: errorText?.phoneNumber?.[0] || '', email: errorText?.email?.[0] || '', customerType: errorText?.type?.[0] || '', }); } if (response && response.customer) { setUserId(response.customer.uid); setPersonId(response.customer.personId); setFirstName(values.firstName); setLastName(values.lastName); setSubmissionStatus('success'); } }; Это отправка формы на бек, по клику кнопки. <TextField placeholder={intl.formatMessage({ id: translationKeys.create_customer_drawer_phone_placeholder, })} type="text" label={intl.formatMessage({ id: translationKeys.create_customer_drawer_phone_label, })} size="large" name="phoneNumber" onChange={handleChange} onBlur={handleBlur} value={values.phoneNumber} errorText={ (touched.phoneNumber ? errors.phoneNumber : undefined) || apiErrors.phoneNumber } data-testid="phone-number-input" /> И вот к примеру поле где я отображаю ошибку, в errorText передаю apiErrors.phoneNumber Но этот блок не отработает, if (createCustomerRequest.error) поскольку createCustomerRequest.error === null

Sultan
Он довольно большой const handleSubmit = async (v...

Залей в сандбокс тогда чтоли

location.reload Умер

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта