@1programmer

Почему state обновляется только после второго клика?

Есть ChatContainer.
constructor(props) {
        super(props)
        this.openCurrentUserInfo = this.openCurrentUserInfo.bind(this)
        this.state = {
            showCurrentUserInfo: null
        }
    }

    

    openCurrentUserInfo(event, conversation, type) {
        this.setState({
            showCurrentUserInfo: conversation
        })
        console.log(this.state.showCurrentUserInfo)
    }

В нем есть 2 компонента, передаю в эти компоненты функцию openCurrentUserInfo, внутри компонентов есть еще компоненты, в них на клик вешаю функцию в которой выполняю openCurrentUserInfo. Почему при первом клике у меня this.state.showCurrentUserInfo == null , а при втором клике уже заполняется значениями, так же после третьего клика старые значения, после четвертого новые значения. То есть что бы изменить state нужно кликнуть дважды. В чем может быть проблема ?
  • Вопрос задан
  • 1465 просмотров
Решения вопроса 2
RomReed
@RomReed
JavaScript, Flutter, ReactNative, Redux, Firebase
async openCurrentUserInfo(event, conversation, type) {
        await this.setState({
            showCurrentUserInfo: conversation
        })
        console.log(this.state.showCurrentUserInfo)
    }
Ответ написан
rockon404
@rockon404 Куратор тега React
Frontend Developer
setState вызывается асинхронно, поэтому сначала отрабатывает весь блокирующий код хандлера.
Поправить можно так:
this.setState({
  showCurrentUserInfo: conversation,
}, () => {
  console.log(this.state.conversation);
});

Очень удобно сверять состояние в componentDidUpdate:
componentDidUpdate(prevProps, prevState) {
  console.log('prev conversation: ', prevState.conversation);
  console.log('new conversation: ', this.state.conversation);
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы