Состояние не меняется в reactjs

Я пытаюсь обновить состояние на основе запроса об ошибке. Изначально я установил для него значение false, при ошибке обновляю его до true. но я всегда считаю это ложным. Может ли кто-нибудь помочь мне с этим. Благодарю.

Ниже приведен фрагмент кода,

class Component extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            error: false,
        };
    }
    submit = () => {
        function_1.finally(() => {
          ............
        }).catch((request) => {
            const errors = request.response.errors;
            let err1;
            if (errors) {
                err1 = errors.find(
                    e => e.code === 'error_code');
            }
            if (err1) {
               this.setState({
                        error: true,
                    });
            }  else {
                this.setState({error: false});
            }

        });
    };
    };
    render = () => {
        const { error } = this.state;
        console.info("error in render", error); //this is always false
    };
}

Не зная ничего об ответе на ошибку, мне просто кажется, что ваши условия не оцениваются как истинные в любой момент, поэтому я никогда не устанавливаю error на True. Не могли бы вы поделиться более подробным контекстом?

Aquarthur 03.10.2018 18:16

Что делать, если он никогда не выполняется, если блок. Кажется, ваше состояние там обновляется.

Shubham Gupta 03.10.2018 18:18

не могли бы вы показать содержимое function_1?

Tareq 03.10.2018 18:25

@shubam Gupta: выполняется оператор журнала в блоке if (err1)

gayana 03.10.2018 18:28
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
4
31
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Блок catch принимает параметр error вместо доступа через request.response.errors, попробуйте вот так:

.catch((error) => {
   const errorStatus = Boolean(error.find(e => e.code === 'error_code'))
   this.setState({
    error: errorStatus
   })
})

Но я полагаю, блок catch запускается только после обнаружения ошибки, так почему бы просто не установить для состояния ошибки значение true вместо проверки error_code?

.catch(() => {
   this.setState({
    error: true
   })
})

Другие вопросы по теме