2017-12-16 8 views
0

reduxストアでナビゲーション状態を取得しようとしました。私は近くにいますが、このエラーが何を意味するかを理解しようとしている: 例外TypeError:未定義のオブジェクトではありません(「nextState.routes.forEach」を評価)React-Navigationネストされたナビゲータを持つRedux:TypeError:未定義はオブジェクトではありません( 'nextState.routes.forEach'を評価しています)...

ナビゲーションルートにauthcheckはにどのようなナビゲーション状態を決定する関数をレンダリングがありますつかいます。正しいものが選択されますが、それを使用しようとすると、私は上記のエラーにぶつかります。

AppNavigatorの内部には、2つの異なるナビゲーションルートがあります。

-AppNavigator 
--SignedInNavigator 
---TabBar 
--SignedOutNavigator 
---StackNavigator 

これはエラーが発生したときに使用されるナビゲーションオブジェクトです。

[exp] Object { 
[exp] "index": 0, 
[exp] "routes": Array [ 
[exp]  Object { 
[exp]  "action": Object { 
[exp]   "routeName": "Home", 
[exp]   "type": "Navigation/NAVIGATE", 
[exp]  }, 
[exp]  "key": "Init-id-1513449605995-1", 
[exp]  "routeName": "SignedOut", 
[exp]  "type": undefined, 
[exp]  }, 
[exp] ], 
[exp] } 

render() { 
    const { navigationState, dispatch, isLoggedIn } = this.props; 
    const state = isLoggedIn ? navigationState.stateForLoggedIn : navigationState.stateForLoggedOut; 

    return (
     <AppNavigator navigation={addNavigationHelpers({ dispatch, state })} /> 
    ); 
} 

必要に応じて還元剤などのコードを追加することができます。なぜなら、減速機が今私が期待している情報を与えているからですが、明らかにそれはうまく消化されていないからです。どんな助けもありがとうございます。ありがとう!

答えて

0

私はまた新しいですが、これは私のために働いた。下の2つの別々のファイル....

ReduxNavigation.js

import React from 'react' 
import * as ReactNavigation from 'react-navigation' 
import { connect } from 'react-redux' 
import AppNavigation from './AppNavigation' 

// here is our redux-aware our smart component 
function ReduxNavigation (props) { 
    const { dispatch, nav } = props 
    const navigation = ReactNavigation.addNavigationHelpers({ 
    dispatch, 
    state: nav 
    }) 

    return <AppNavigation navigation={navigation} /> 
} 

const mapStateToProps = state => ({ nav: state.nav }) 
export default connect(mapStateToProps)(ReduxNavigation) 

AppNavigation.js

import { StackNavigator } from 'react-navigation' 
import { Animated, Easing } from 'react-native' 
import LoginScreen from '../Containers/LoginScreen' 
import LaunchScreen from '../Containers/LaunchScreen' 
import HomeScreen from '../Containers/HomeScreen' 
import SignUpScreen from '../Containers/SignUpScreen' 
import SettingsScreen from '../Containers/SettingsScreen' 
import VehicleCreateScreen from '../Containers/VehicleCreateScreen' 
import styles from './Styles/NavigationStyles' 

// Manifest of possible screens 
const PrimaryNav = StackNavigator({ 
    LoginScreen: { screen: LoginScreen }, 
    LaunchScreen: { screen: LaunchScreen }, 
    HomeScreen: { screen: HomeScreen }, 
    SignUpScreen: { screen: SignUpScreen }, 
    SettingsScreen: { screen: SettingsScreen }, 
    VehicleCreateScreen: { screen: VehicleCreateScreen } 
}, { 
    // Default config for all screens 
    headerMode: 'none', 
    initialRouteName: 'LaunchScreen', 
    navigationOptions: { 
     headerStyle: styles.header 
    }, 
    transitionSpec: { 
     duration: 0, 
     timing: Animated.timing, 
     easing: Easing.step0, 
    }, 
    }, 

    transitionConfig =() => ({ 
    }), 


) 

export default PrimaryNav 
+1

は、今の私の変更をシェルビング終わっています。私の主な問題は、私はトップのスタックナビゲータに行く2つの異なるナビゲータがあるということだと思う。私はナビゲーションツリーが期待どおりに構築されているとは思わない。私はすべての画面をトップレベルのstacknavigatorに置くと動作しますが、ユーザを認証して画面ナビゲータを別に保つことに問題があります。私は、私が望む機能を得るために構造をもっと変えなければならないと思う。 – Runner5

関連する問題