からデータをフェッチする前にビューをレンダリング私は、ユーザーが私にログインしたユーザーにしている場合ログインしていない場合サインインもコンポーネントをレンダリングしようとしているがホームコンポーネントをレンダリングしようとしています。 でサインインもコンポーネントセット記憶「isLIn」から「真の」サインアウト上の[ホームコンポーネントから]ストレージ「isLIn」「false」ににして反応-ネイティブアプリケーションはストレージをチェック開くたびに設定Storageの値としてStateを設定します。リアクトネイティブ:ストレージ
コードを見てください:
import React, { Component } from 'react';
import { AsyncStorage } from 'react-native';
import { Scene, Router } from 'react-native-router-flux';
import Login from './login_component';
import Home from './home_component';
var KEY = 'isLIn';
export default class main extends Component {
state = {
isLoggedIn: false
};
componentWillMount() {
this._loadInitialState().done();
}
_loadInitialState = async() => {
try {
let value = await AsyncStorage.getItem(KEY);
if (value !== null && value === 'true') {
this.setState({ isLoggedIn: true });
} else {
this.setState({ isLoggedIn: false });
}
} catch (error) {
console.error('Error:AsyncStorage:', error.message);
}
};
render() {
const _isIn = (this.state.isLoggedIn===true) ? true : false;
return (
<Router>
<Scene key="root" hideNavBar hideTabBar>
<Scene key="Signin" component={Login} title="Signin" initial={!_isIn} />
<Scene key="Home" component={Home} title="Home" initial={_isIn}/>
</Scene>
</Router>
);
}
}
私はなぜ知らないが、ストレージの値を取得する前に、ビューが最初にレンダリングします。反応ネイティブのライフサイクルに応じてレンダー()はの後にのみ実行されます.WillMount()としてReact_Docと表示されます。
私はAsyncStorageを使用してストレージを設定して削除し、ルーティングにはReact-Native-Router-Fluxを使用しています。
私は解決策を試してみました:
を完了するまで、プレースホルダを配置することができ、あなたの方法をレンダリングにあなたはとしてロードシーンを作成することができます最初のシーンはそこにチェックして、それがユーザを見つけたかどうかに基づいてルートを持っています。 –