Как глубокую ссылку на вложенные стеки с реагированием natvgation? - PullRequest
0 голосов
/ 04 октября 2019

Я пытаюсь обеспечить глубокое связывание для моего приложения с помощью React Navigation. Пути к стеку навигации верхнего уровня работают нормально, но дочерние пути к ним не подходят.

Мое приложение использует стек React Native, redux, redux navigation и Expo. Я ознакомился с документами Expo и React Navigation о том, как реализовать связывание в приложении. Я назначил правильный префикс и все. Я тестирую приложение, используя кнопки, которые перенаправляют на нужные пути, а также запускаю adb shell am start -W -a android.intent.action.VIEW -d "exp://127.0.0.1:19000/--/main"

. Если я пытаюсь добраться до /auth или /main, оно работает как положено. Я вижу, как приложение переключает экраны соответственно.

adb shell am start -W -a android.intent.action.VIEW -d "exp://127.0.0.1:19000/--/main

adb shell am start -W -a android.intent.action.VIEW -d "exp://127.0.0.1:19000/--/auth

Но когда я пытаюсь перейти на вложенный путь, как /main/events, ничего не происходит.

adb shell am start -W -a android.intent.action.VIEW -d "exp://127.0.0.1:19000/--/main/events

Это упрощенная версия моих маршрутов, но на самом деле я использую этот точный код для запуска своих тестов.

AppNavigator = createAppContainer(createSwitchNavigator({
  // You could add another route here for authentication.
  // Read more at https://reactnavigation.org/docs/en/auth-flow.html
  AuthLoading: {
    screen: AuthLoadingNavigator,
  },
  Main: {
    path: 'main',
    screen: createBottomTabNavigator({
      HomeStack: createStackNavigator({
        Home: {
          path: 'home',
          screen: HomeScreen,
          navigationOptions: () => ({
            title: 'Home',
            headerMode: 'none',
            headerBackTitle: null,
            headerBackTitleVisible: false,
            header: null,
          }),
        },
        EventsArchive: {
          path: 'events',
          screen: EventsArchiveScreen,
          navigationOptions: () => ({
            headerMode: 'screen',
            headerBackTitle: null,
          }),
        },
      })
    })
  },
  Auth: {
    path: 'auth',
    screen: AuthNavigator,
  },
}))

1 Ответ

0 голосов
/ 11 октября 2019

Я нашел решение своей проблемы. Мне не хватало назначения пути к HomeStack. Это рабочий код:

AppNavigator = createAppContainer(createSwitchNavigator({
  // You could add another route here for authentication.
  // Read more at https://reactnavigation.org/docs/en/auth-flow.html
  AuthLoading: {
    screen: AuthLoadingNavigator,
  },
  Main: {
    path: 'main',
    screen: createBottomTabNavigator({
      HomeStack: {
        path: '', // THIS IS THE PART THAT I WAS MISSING
        screen: createStackNavigator({
          Home: {
            path: 'home',
            screen: HomeScreen,
            navigationOptions: () => ({
              title: 'Home',
              headerMode: 'none',
              headerBackTitle: null,
              headerBackTitleVisible: false,
              header: null,
            }),
          },
          EventsArchive: {
            path: 'events',
            screen: EventsArchiveScreen,
            navigationOptions: () => ({
              headerMode: 'screen',
              headerBackTitle: null,
            }),
          },
        })
      },
    })
  },
  Auth: {
    path: 'auth',
    screen: AuthNavigator,
  },
}))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...