【问题标题】:Dynamic route with React Navigation使用 React Navigation 的动态路由
【发布时间】:2019-05-31 09:28:19
【问题描述】:

我有一个反应本机应用程序运行反应导航 3.9 与 2 个组件 SignupEvent

export default class Signup extends React.Component {
}


export default class Event extends React.Component {
}

还有一个用于检索本地令牌的启动组件。

只要从本地驱动器检索到令牌,则初始路由为Event。否则为Signup

const stack = createStackNavigator ({
   Event: Event,
   Signup: Signup,
},{
  InitialRouteName: InitRoute  //<<either Event or Signup
})

const initScreen = createSwitchNavigator({
  Splash: Splash,
  App: stack,
})

export default createAppContainer(initScreen)

这里InitRoute 需要通过检查在启动组件中检索到的本地令牌来设置。使用反应导航,动态路线不是很直接。用反应导航实现它的好方法是什么?

【问题讨论】:

    标签: react-native react-navigation


    【解决方案1】:

    您可以根据令牌创建动态路由。您将需要一个呈现这两条路线的屏幕。喜欢

    // app renders createStackNavigator with Event and Signup
    const routes = {
      Event: {
        screen: Event,
        navigationOptions: {
          title: 'Event',
        },
      },
      Signup: {
        screen: Signup,
        navigationOptions: {
          title: 'Signup',
        },
      },
    };
    
    class App extends React.Component {
    
      // creates dynamic routes
      createDynamicRoutes = initiaRoute => {
        return createAppContainer(
          createStackNavigator(routes, {
            initialRouteName: initiaRoute,
          })
        );
      };
    
      render() {
        // get initial route from splash screen
        // this.props.navigation.navigate('App', { init: 'init screen' });
        const initiaRoute = this.props.navigation.state.params.init || 'Event';
    
        // create routes and set initial route
        const AppContainer = this.createDynamicRoutes(initiaRoute);
        return <AppContainer />;
      }
    }
    

    InitScreen navigator 渲染 App 和 Splash

    const InitScreen = createSwitchNavigator({
      Splash: Splash,
      App: App,
    })
    
    export default createAppContainer(InitScreen);
    

    Demo

    【讨论】:

    • Junius L. 非常感谢。这就是我正在寻找的答案。
    • 我正在向路线添加一个 createBottomTabNavigator。 const bottomTab = createBottomTabNavigator({Event: EventStack, Signup: SignupStack})。 EventStack 和 SignupStack 中都有多个屏幕。我可以使用您在此处提供的类似逻辑吗?我正在构建一个可以重用的动态路由结构。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2017-11-07
    • 2019-04-14
    • 2021-05-08
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 2022-01-07
    相关资源
    最近更新 更多