Я думаю, что есть проблема с кодом, который происходит в блоке .then
. Я не могу это понять, но мне кажется, что операторы return не повлияют на рендер.
Так я бы реорганизовал ваш компонент, если бы планировал делать то, что вы делаете. Очевидно, вы будете изменять то, что возвращается для каждого варианта использования, а не упрощенные представления, которые я вставил.
export default class App extends React.Component {
constructor(props) {
super(props);
this.state = {
notFirstLaunch: false
}
}
componentDidMount() {
this.firstLaunchCheck();
}
firstLaunchCheck = () => {
SecureStore.getItemAsync('notFirstLaunch').then(value => {
if (value !== 'true') {
SecureStore.setItemAsync('notFirstLaunch', 'true');
}
this.setState({notFirstLaunch: value === 'true'})
});
}
render() {
if (this.state.notFirstLaunch) {
return (
<View style={styles.container}>
<Text>Main</Text>
</View>
);
} else {
return (
<View style={styles.container}>
<Text>Walkthrough</Text>
</View>
);
}
}
}
Когда компонент монтируется, я вызываю firstLaunchCheck
, затем он обновляет состояние переменной notFirstLaunch, если значение, которое было сохранено в SecureStore
, равно «true», если это первый запуск, он также устанавливает значение в SecureStore
. Изменение в состоянии вызывает повторную визуализацию, которая затем показывает правильное представление.