【问题标题】:How to reset stack from a 'More' page in react navigation?如何在反应导航中从“更多”页面重置堆栈?
【发布时间】:2019-05-07 06:40:53
【问题描述】:

我有一个bottomTabNavigator,它有5 个屏幕,都链接到它们自己的堆栈。第 5 个堆栈是“更多”堆栈。当我在“更多”堆栈中的页面内时,我希望能够单击返回到其他选项卡之一并清除堆栈,以便当我返回“更多”时它从堆栈顶部开始,而不是最后访问的页面。

我尝试了几种在 Stack Overflow 上找到的解决方案,但都没有奏效。一对似乎来自已弃用的反应导航版本。

有什么办法可以做到吗?

这个我试过了……

const MainTabNavigator = createBottomTabNavigator({
    Home: {
        screen: HomeStack,
      },

    ... other screens ...

    More: {
        screen: MoreStack,
        navigationOptions: {
          tabBarOnPress: ({navigation}) => {

             if  (!navigation.isFocused) {
               navigation.dispatch(resetAction)
             }

            }
        },
      }

...但它对我不起作用。我的resetAction就是这样...

const resetAction = StackActions.reset({
  index: 0,
  actions: [NavigationActions.navigate({ routeName: 'MainTabNavigator' })],
})

我尝试了其他方法从 Stack Overflow 上的答案中重置操作,但都没有奏效。

【问题讨论】:

    标签: react-native react-navigation


    【解决方案1】:

    您可以在tabBarOnPress 中使用popToTop()

    但是,这只有在应用于每个选项卡时才能正常工作,因此如果有一个选项卡您希望保留上次访问的屏幕,那么此解决方案将不起作用。

    YourRouteName: {
      screen: YourStack,
      navigationOptions: {
        tabBarOnPress: ({ navigation }) => {
          navigation.navigate({
            routeName: navigation.state.routeName,
            action: navigation.popToTop()
          })
        }
      }
    }
    

    【讨论】:

    • 这实际上完全按照我想要的方式工作,谢谢!但是,一个侧面问题......通过此修复,当在更多堆栈中的页面上时,我单击底部选项卡,但是当我返回“更多”选项卡时,它显示上一页滑出而不是自动显示堆栈中的主“更多”页面。它确实显示了我想要的默认“更多”页面,但它显示了我之前在“更多”堆栈中滑出的页面。
    • 不确定,这是我做的小吃,展示了这一点,但没有显示页面滑出:snack.expo.io/BJNuGBRsE
    • 嗯,你是对的,它不会在你的零食中这样做。我会尝试将我得到的与你得到的进行比较并弄清楚。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2019-07-16
    • 1970-01-01
    • 1970-01-01
    • 2019-03-08
    • 1970-01-01
    • 2020-01-28
    • 1970-01-01
    • 2021-01-31
    相关资源
    最近更新 更多