2016-07-26 31 views
3

嘿,我试图在使用react-native-router-flux时获取当前场景密钥。react-native-router-flux,如何获取当前的场景密钥

我的路线文件:

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 

,你可以看到我在尝试发送当前场景名称,谷歌的跟踪分析,但我似乎无法能够得到当前显示的场景的关键,有任何想法吗?

回答

3

我最终实现中央减速:

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

对于“常量defaultReducer =减速(PARAMS)”,你在哪里导入您传递PARAMS的“减速”功能?我不确定它的重点是什么:“return defaultReducer(state,action)”。 – Squeaky

+0

一旦自定义reducer做它的工作(这是帮助我跟踪页面更改为谷歌分析)我将状态和行动返回到默认reducer,所以路由器可以做到这一点魔术和更改应用程序中的视图,否则路由器停止工作。 默认缩减器是库的一部分: 从'react-native-router-flux'导入{Scene,Switch,Router,Reducer} – ospfranco

+0

下面是基于以下示例的示例:https://github.com/aksonov /react-native-router-flux/blob/b11a84962e4e4d9265770382b8859d21d1a12ea0/Example/Example.js – superquest