import string, random
source = string.hexdigits[:16]
result = ''
while len(result) < 12 :
idx = random.randint(0,len(source))
if len(result) < 3 or result[-1] != result[-2] or result[-1] != source[idx] :
result += source[idx]
Это связано с тем, что действия setState являются асинхронными и пакетируются для повышения производительности. Это объясняется в документации setState.
setState () не изменяет немедленно this.state, но создает ожидающий переход в состояние. Доступ к this.state после вызова этого метода может потенциально вернуть существующее значение. Нет гарантии синхронной работы вызовов к setState, и вызовы могут быть сгруппированы для увеличения производительности.
blockquote>Так что вы можете сделать что-то вроде этого,
this.setState({foo: 'bar'}, () => { // Do something here. });
async componentDidMount() {
const { user, roomName } = this.props.navigation.state.params
await this.props.getRoom(roomName)
this.setState({
room: this.props.room
})
}
В этом случае вам не нужно использовать местное государство.
render() {
const {room: {name}} = this.props;
return (
<View style={styles.container}>
<ScrollView contentContainerStyle={styles.contentContainer}>
<View>
<Text>Room name: {name}</Text>
</View>
</ScrollView>
</View>
)
}
Здесь, поскольку вы используете redux (глобальное состояние), вам не нужно добавлять его в локальное состояние. Вы можете напрямую получить доступ к стоимости комнаты из реквизита.