Как сбросить стеки на вкладке, изменить внутри bottomTabNavigayor? - PullRequest
1 голос
/ 07 апреля 2020

Закуска

У меня есть bottomTabNavigator во вкладке, и внутри каждой вкладки есть стеки. Я хочу сбросить стек при каждом нажатии на другую вкладку.

Навигатор вкладок -

Вкладка 1 - | _Stack Navigator

     - Screen 1

     - Screen 2

Вкладка 2 - | _Stack Navigator

     - Screen 3

     - Screen 4

Вкладка 3 - | _Stack Navigator

     - Screen 5
     - Screen 6

Текущий сценарий:. Предположим, я на вкладке 1 - я перехожу на экран 2 с экрана 1. Затем я нажимаю на вкладку 2. Теперь, если я снова нажму на вкладку 1, вместо экрана 1 появится экран 2.

Похожая вещь происходит на каждой вкладке.

Я хочу сбросить вкладку при каждом нажатии вкладки.

Пожалуйста, помогите.

Я использую -

"зависимостей": {"@act-native-community / cli": "^ 4.1.0", "@react -native-community / masked-view ":" ^ 0.1.6 "," @ реагировать-навигация / нижние вкладки ":" ^ 5.0.5 "," @ реагировать-навигация / родной ":" ^ 5.0.5 " , "@ реагировать-навигация / стек": "^ 5.0.5", "реагировать": "16.9.0", "реагировать-нативный": "0.61.5", "реагировать-нативный-жест-обработчик": " ^ 1.6.0 "," Reaction-native-gifted-chat ":" ^ 0.13.0 "," Reaction-native-reanimated ":" ^ 1.7.0 "," Reaction-native-safe-area-context ": "^ 0.7.3", "реагировать на родные экраны": "^ 2.0.0-бета.7",},

Ответы [ 2 ]

0 голосов
/ 07 апреля 2020

Обновите последнюю версию response-navigation и ее зависимости и используйте это решение, это сработало для меня.

<AppTabs.Screen
  name="TabScreen1"
  listeners={({ navigation }) => ({
    tabPress: () => {
      navigation.navigate('Main1', { screen: 'Main2' });
    },
  })}
/>
0 голосов
/ 07 апреля 2020

Вы можете ovverride tabBarOnPress, чтобы получить контроль над щелчком вкладки и сбросить стек вручную или использовать некоторые другие приемы.

Возможное решение должно быть

navigationOptions: ({ navigation }) => ({
  tabBarOnPress: ({ scene, jumpToIndex }) => {
    const { route, focused, index } = scene;
    if (focused) {
      if (route.index > 0) {
        const { routeName, key } = route.routes[1]
        navigation.dispatch(NavigationActions.back({ key }))
      }
    } else {
      jumpToIndex(index);
    }
  },
});

Возможно, вам придется обновить этот код для v5. (То же самое касается решений ниже)

См. Больше решений здесь

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