2016-07-26 5 views
3

ちょっと、反応ネイティブルータフラックスを使用している間、現在のシーンキーを取得しようとしています。反応ネイティブルータフラックス、現在のシーンキーを取得する方法

私のルートファイル:

const AppRouter = connect()(Router) 

class Routes extends Component { 
    render() { 
    function selector(props) { 
     console.log(props) 
     // GoogleAnalytics.trackView(props.navigationState) 
     return props.auth.isLoggedIn ? (props.auth.isVerified? 'home': 'authenticate') : 'authenticate' 
    } 

    const component = connect(state => ({ 
     auth: state.auth, 
    }))(Switch) 

    return (
     <AppRouter> 
     <Scene key="root" component={component} tabs selector={selector} hideNavBar hideTabBar> 
      <Scene key="authenticate" hideTabBar> 
      <Scene type="replace" key="login" title="Login" initial component={GradientBackground(LoginScreen)} hideNavBar/> 
      <Scene type="replace" key="register" component={GradientBackground(RegisterScreen)} hideNavBar/> 
      <Scene type="replace" key="forgotPassword" title="forgotPassword" component={GradientBackground(ForgotPasswordScreen)} hideNavBar/> 
      <Scene type="replace" key="emailConfirmation" component={GradientBackground(EmailConfirmationScreen)} hideNavBar/> 
      </Scene> 
      <Scene key="home" component={NavigationDrawer} type="replace"> 
      {require('./scenes/home')} 
      </Scene> 
     </Scene> 
     </AppRouter> 
    ) 
    } 
} 

export default Routes 

あなたは私が追跡のための分析をGoogleに現在のシーン名を送信しようとしているが、私は、現在表示されているシーンのキーを取得することができるように見えることはできません見ることができるように、何か案は?

答えて

3

私は真ん中の減速実装することになった:あなたはあなたにのparamsを渡す「減速」機能をインポートしている「のconst defaultReducer =減速(のparams)」については、

const AppRouter = connect()(Router) 

class Routes extends Component { 

    render() { 
    let catchInitialState = false 

    function selector(props) { 
     return props.auth.isLoggedIn ? (props.auth.isVerified? 'home': 'authenticate') : 'authenticate' 
    } 

    const reducerCreate = params => { 
     const defaultReducer = Reducer(params) 
     return (state, action) => { 
     if(action.type == 'RootContainerInitialAction') { 
      catchInitialState = true 
     } 

     if(catchInitialState && action.type != 'RootContainerInitialAction') { 
      GoogleAnalytics.trackScreenView(action.scene.sceneKey) 
      catchInitialState = false 
     } 

     if(action.type == 'REACT_NATIVE_ROUTER_FLUX_REPLACE') { 
      GoogleAnalytics.trackScreenView(action.key) 
     } 

     return defaultReducer(state, action) 
     } 
    } 

    const component = connect(state => ({ 
     auth: state.auth, 
    }))(Switch) 

    return (
     <AppRouter createReducer={reducerCreate}> 
     <Scene key="root" component={component} tabs selector={selector} hideNavBar hideTabBar> 
      <Scene key="authenticate" hideTabBar> 
      <Scene type="replace" key="login" initial component={GradientBackground(LoginScreen)} hideNavBar/> 
      <Scene type="replace" key="register" component={GradientBackground(RegisterScreen)} hideNavBar/> 
      <Scene type="replace" key="forgotPassword" component={GradientBackground(ForgotPasswordScreen)} hideNavBar/> 
      <Scene type="replace" key="emailConfirmation" component={GradientBackground(EmailConfirmationScreen)} hideNavBar/> 
      </Scene> 
      <Scene key="home" component={NavigationDrawer} type="replace"> 
      {require('./scenes/home')} 
      </Scene> 
     </Scene> 
     </AppRouter> 
    ) 
    } 
} 

export default Routes 
+0

を?私はそれが何であるか分からない: "return defaultReducer(state、action)"。 – Squeaky

+0

カスタムレデューサーが仕事をしたら(私はGoogleアナリティクスのページ変更を追跡する手助けをしています)、状態とアクションをデフォルトの減速機に戻して、ルータはそれを魔法にしてアプリ内のビューを変更できます。 デフォルトのレデューサーはライブラリの一部です: 「react-native-router-flux」から{Scene、Switch、Router、Reducer}をインポートします – ospfranco

+0

これは、次の例に基づいています:https://github.com/aksonov /react-native-router-flux/blob/b11a84962e4e4d9265770382b8859d21d1a12ea0/Example/Example.js – superquest

関連する問題