値が AsyncStorage からフェッチされる前に React Native がレンダリングを試みるという、よくある問題です。いくつかの場所でこれに対する解決策を見てきましたが、何らかの理由でまったく機能しません。React Native 25.1 を使用しているためでしょうか。「読み込み中...」で無期限にスタックします。レンダーでコンソール ログを実行して isLoading (メソッドなし) を表示すると、if
返されるため、理論的には動作するはずです。しかし、メソッドが有効になっていると、「読み込み中」に永久にスタックし、ログは false のみを返します。false
true
if
import React, { Component } from 'react';
import {
Text,
View,
AsyncStorage
} from 'react-native';
class MainPage extends Component {
constructor(props: Object): void {
super();
this.state = {
isLoading: false,
};
}
componentWillMount() {
AsyncStorage.getItem('accessToken').then((token) => {
this.setState({
isLoading: false
});
});
}
render() {
if (this.state.isLoading) {
return <View><Text>Loading...</Text></View>;
}
// this is the content you want to show after the promise has resolved
return <View/>;
}
});