2017-02-21 1 views
0

私はApp.jsファイルを持っていて、それは自分のアプリケーションのルートです(iosとアンドロイドの参照)。
app.jsレンダリングメソッドが呼び出される前に私が必要とする値をAsyncStorageに保存しています。
問題は、それが遅くてasyncであり、私はその価値を得ることができません。アプリケーションロード前にAsyncStorageから値を取得する最も良い方法は何ですか

class App extends React.Component { 
    constructor(props) { 
    super(props); 
    this.init() 
    } 
    async init() { 
    try { 
    const value = await AsyncStorage.getItem('@myPoorValue:key'); 
    if (value !== null){ 
    ... 
    } 
} catch (error) {} 
    } 
} 
... 
render (... 

ここで私の問題点を説明してくれることを願っています。
私はそれを同期させる方法がないことを知っています(私はそれが好きですが)この状況で何をすべきか分かりません。
私はそれを少し良く説明するために、私はI18nを使用して手動でI18n.localeをいくつかの値に設定し、他のコンポーネントは手動で設定する前にデフォルト値を取得します。
ちょうど私もreduxを使用して、私はそれに選択された値を渡します。

+0

あなたはappNavigator.jsを持っている可能性がありますか? – Codesingh

答えて

1

は、次のことを試してください。

... 
 

 
constructor(props) { 
 
    super(props) 
 
    
 
    this state = { 
 
    isLoading: true 
 
    } 
 
} 
 
    
 
async componentDidMount() { 
 
    await this.init() 
 
    
 
    // you might want to do the I18N setup here 
 
    this.setState({ 
 
    isLoading: false 
 
    }) 
 
} 
 

 
async init() { 
 
    const value = await AsyncStorage.getItem('@myPoorValue:key') 
 
    ... 
 
} 
 

 
...

事がinit()は約束を返し、あなたはそれが解決されるまで待つ必要があるということです。それはawaitが救助に来るときです。

また、最初のレンダー時にローダーを設定し、AsyncStorage値がフェッチされた後に実際のマークアップに置き換えるために状態を切り替える必要があります。私はコードに入れましたが、あなたの設定に応じて、代わりにreduxアクションをトリガーしたいかもしれません。

関連する問題