Реагировать - setState не обновляет значение

Я пытаюсь обновить состояние с помощью значения localStorage в DidMount, но оно не обновляется:

type Props = {
};

type State = {
    id_evaluation: string,
};

class Evaluation extends Component < Props, State > {
    state = {
        id_evaluation: '',
    }

    componentDidMount() {
        const id_eval = getEvaluation();
        console.info('1 - ', id_eval)

        this.setState({
            id_evaluation: '1',
        });

        console.info('2 - ', this.state.id_evaluation)

В первом console.info у меня значение 1, во втором остается пустым, состояние не обновляет.

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

Ответы 3

setState работает асинхронно, поэтому передайте console.info как callback, чтобы получить обновленное состояние.

this.setState({ id_evaluation: '1'}, () => console.info('2- ', this.state.id_evaluation));

при использовании в качестве вашего кода console.info('2 - ', this.state.id_evaluation) печатает предыдущее состояние, а не обновленное состояние.

Это потому, что вы вызываете console.info до того, как состояние обновится. Попробуй это:

this.setState({
  id_evaluation: '1',
}, () => {
  console.info('2 - ', this.state.id_evaluation);
});

Смотрите эту тему:

Могу ли я выполнить функцию после завершения обновления setState?

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

this.setState — асинхронная функция.

 this.setState({
        id_evaluation: '1',
 }, () => console.info('2 - ', this.state.id_evaluation));

Функция обратного вызова решит вашу проблему.

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