Динамический маршрут с React Navigation - PullRequest
1 голос
/ 31 мая 2019

У меня есть собственное реактивное приложение, работающее с реагирующей навигацией 3.9 с 2 компонентами Signup и Event:

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 необходимо установить путем проверки локального токена, который извлекается в компоненте-заставке.Динамические маршруты не очень прямолинейны с реактивной навигацией.Какой хороший способ реализовать это с помощью реагирующей навигации?

1 Ответ

1 голос
/ 31 мая 2019

Вы можете создавать динамические маршруты на основе токена.Вам понадобится экран, который отображает эти два маршрута.Как

// 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 навигатор отображает приложение и всплеск

const InitScreen = createSwitchNavigator({
  Splash: Splash,
  App: App,
})

export default createAppContainer(InitScreen);

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...