@yankoyski

Почему выводится старое значение state?

Почему console.log выводит старое значение из state, если перед этим сработал setState?

import React, {Component} from "react";

export default class Test extends Component{

    constructor(props) {

        super(props);

        this.state = {
            test: false
        }
    }

    componentWillMount() {

        this.setState({
            test: !this.state.test
        });

        console.log(this.state.test)//false
    }


    render() {

        return (
            <div />
        )
    }
}
  • Вопрос задан
  • 283 просмотра
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега React
Because this.props and this.state may be updated asynchronously, you should not rely on their values for calculating the next state.

Документация

Вот так правильно:
this.setState(
  (state) => ({test: !state.test}),
  () => console.log(this.state.test)
);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
rockon404
@rockon404 Куратор тега React
Frontend Developer
this.setState(
  prevState => ({ test: !prevState.test }),
  () => console.log(this.state.test),
);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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