3

小吃

我的选项卡中有bottomTabNavigator,每个选项卡内都有堆栈。每当我单击另一个选项卡时,我都想重置堆栈。

选项卡导航器-

选项卡 1 - |_堆栈导航器

     - Screen 1

     - Screen 2

选项卡 2 - |_堆栈导航器

     - Screen 3

     - Screen 4

选项卡 3 - |_堆栈导航器

     - Screen 5
     - Screen 6

目前的情况是,。假设我在选项卡 1 上 - 我从 screen 1 导航到 Screen 2 。然后我点击 Tab 2 。现在,如果我再次单击选项卡 1,将显示屏幕 2 而不是屏幕 1。

每个选项卡上都发生了类似的事情。

我想在每个选项卡单击时重置选项卡。

请帮忙。

我在用 -

“依赖”:{“@react-native-community/cli”:“^4.1.0”,“@react-native-community/masked-view”:“^0.1.6”,“@react-navigation/bottom -tabs”:“^5.0.5”,“@react-navigation/native”:“^5.0.5”,“@react-navigation/stack”:“^5.0.5”,“react”:“16.9。 0”、“react-native”:“0.61.5”、“react-native-gesture-handler”:“^1.6.0”、“react-native-gifted-chat”:“^0.13.0”、“ react-native-reanimated": "^1.7.0", "react-native-safe-area-context": "^0.7.3", "react-native-screens": "^2.0.0-beta.7 ", },

4

3 回答 3

1

更新最新版本的 react-navigation 及其依赖项并使用此解决方案,这对我有用。

<AppTabs.Screen
  name="TabScreen1"
  listeners={({ navigation }) => ({
    tabPress: () => {
      navigation.navigate('Main1', { screen: 'Main2' });
    },
  })}
/>
于 2020-04-07T12:15:01.287 回答
0

您可以覆盖 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 更新此代码。(下面的解决方案也是如此)

在此处参考更多解决方案

于 2020-04-07T07:02:51.800 回答
0

如果您使用的是导航版本 4 或更低版本,那么我有一个非常简单的方法来做到这一点。

 tabBarOnPress:({ navigation }) => {
      navigation.navigate(HomeStack,{screen:navigation.state.routes[0].routeName});
       navigation.popToTop();
    },
于 2021-05-26T16:31:12.063 回答