React Navigation - навигация и установка истории для кнопки возврата - PullRequest
0 голосов
/ 10 июля 2020

У меня есть приложение для реагирования, использующее react-navigation@5.1

У меня есть TabNavigator (вложенный внутри навигатора стека) с несколькими вкладками. Каждая вкладка содержит другой StackNavigator. Один из этих стеков вкладок имеет экран списка и экран сведений.

Приложение настроено на получение уведомлений pu sh, когда приложение работает в фоновом режиме. Когда пользователь нажимает уведомление pu sh, он открывает приложение и переходит к экрану подробностей /: id.

Проблема в том, что если пользователь еще не был на экране списка, кнопка «Назад» не отображается. имеют правильную историю и не отображаются.

Как мне go убедиться, что кнопка «Назад» для экрана с подробностями всегда переводит пользователя на экран со списком?

Вот изображение моих вложенных навигаторов

<NavigationContainer>
 <Stack.Navigator>
    <Stack.Screen name="loading">
    <Stack.Screen name="auth">
    <Stack.Screen name="app">
      <Tabs.Navigator>
         <Tabs.Screen name="community">
           <Stack.Navigator>
              <Stack.Screen name="list">.  <- list
              <Stack.Screen name="detail"> <- detail
           </Stack.Navigator>
         </Tabs.Screen>
         <Tabs.Screen name="profile">
           <Stack.Navigator>
              <Stack.screen name="edit">  <- user may already be on this screen
              ...
           </Stack.Navigator>
         </Tabs.Screen>
         ... more tabs and stacks
    </Stack.Screen>
 </Stack.Navigator>
</NavigationContainer>

Каждый раз, когда пользователь получает уведомление pu sh, он уже будет на одном из навигаторов стека внутри навигатора вкладок. Опять же, проблема в том, что пользователь может находиться на экране редактирования внутри вкладки профиля. Мне нужно перенаправить их на подробный экран вкладки сообщества, но убедиться, что в истории есть экран со списком для обратной функции.

1 Ответ

0 голосов
/ 10 июля 2020

Вы можете заменить историю маршрута с помощью действия сброса. Это должно помочь вам начать:

import { CommonActions } from '@react-navigation/native';

navigation.dispatch(state => {
  // Assuming you only have the current screen in state.routes
  const routes = [{name: 'home-or-wherever'}, ...state.routes];

  return CommonActions.reset({
    ...state,
    routes,
    index: routes.length - 1,
  });
});

https://reactnavigation.org/docs/navigation-actions/#reset

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