Ваш state
обновляется, однако вы звоните своему alert
не в то время, поэтому оно использует предыдущее значение state
.
Состояние асинхронно, что означает, что для этого требуется времядля этого, чтобы установить.Таким образом, в вашем существующем коде состояние не было обновлено к тому времени, когда вы вызываете вашу alert
Если вы используете функцию обратного вызова, то вы можете увидеть изменения состояния после того, как они произошли.
firebase.database().ref(userstype).on('value', (snapshot) => {
this.setState=({userType:snapshot.val()}, () => {
alert(this.state.userType)
})
});
Я бы посоветовал вам прочесть эти замечательные статьи Майкла Чана, которые показывают, как правильно использовать state
https://medium.learnreact.com/setstate-is-asynchronous-52ead919a3f0
https://medium.learnreact.com/setstate-takes-a-callback-1f71ad5d2296
https://medium.learnreact.com/setstate-takes-a-function-56eb940f84b6
componentDidUpdate
Одно место, где вы можете проверить, находится ли ваше состояние в componentDidUpdate
https://reactjs.org/docs/react-component.html#componentdidupdate
componentDidUpdate(prevProps, prevState) {
console.warn('prevState: ', prevState.userType, 'newState: ', this.state.userType)
}
Это должно показывать console.warn
при каждом изменении состояния, оно должно позволять вам видеть, устанавливается ли состояние.