Redux フレームワークを使用する React Native アプリがあり、Navigator コンポーネントを使用してナビゲーションを処理しています。ナビゲーションを機能させるのに少し問題があり、それを正しく行う方法の良い例を見つけることができないので、助けと説明を探しています。
私が現在持っているものの要点は次のとおりです。これは機能していますが、正しく行っているかどうかはわかりません。
ルート コンポーネント
...
renderScene(route, navigator) {
console.log('RENDER SCENE', route);
const Component = route.component;
return (
<Component navigator={navigator} route={route} {...this.props} />
)
}
render() {
return (
<Navigator
renderScene={(route, nav) => this.renderScene(route, nav)}
initialRoute={{ name: 'Signin', component: Signin }} />
)
}
サインイン コンポーネント
...
componentWillReceiveProps(nextProps) {
if (!this.props.signedIn && nextProps.signedIn) {
console.log('PUSHING TO MAIN');
nextProps.navigator.push({ name: 'Main', component: Main });
}
}
質問:
navigator.push
1: ここで最初に考えたのは、おそらくコードをアクションに移すべきだということです。しかしcomponentWillReceiveProps
、アクションを呼び出すのに適切な場所はありますか? Signin
コンポーネントが読み込まれると、ユーザーがアクティブなセッションを既に持っている場合にサインインするためのアクションが起動されます。デフォルトではサインインしていないので、次の小道具が届いたときに、変更されたかどうかを確認してから にプッシュしMain
ます。
2: 「PUSH TO MAIN」がログに記録された直後のコンソール ログに、2 つの「RENDER SCENE」ログが表示されます。
[info] 'RENDER SCENE', { name: 'Signin', component: [Function: Signin] } (EXPECTED)
[info] 'PUSHING TO MAIN'
[info] 'RENDER SCENE', { name: 'Signin', component: [Function: Signin] } (WHY?)
[info] 'RENDER SCENE', { name: 'Main', component: [Function: Main] }
Signin
コンポーネントのみをプッシュしている場合に、なぜ RENDER SCENE が 2 回呼び出されるのか (最初の呼び出しはコンポーネントです) が気になりMain
ます。
また、もともとcomponentWillReceiveProps
私がチェックしていた方法で:
if (nextProps.signedIn) {
nextProps.navigator.push({ name: 'Main', component: Main });
}
しかし、これによりMain
コンポーネントが 2 回プッシュされました。