React Native - 如何在每个屏幕中保留 TabNavigator

Posted

技术标签:

【中文标题】React Native - 如何在每个屏幕中保留 TabNavigator【英文标题】:React native - how to keep TabNavigator in every screen 【发布时间】:2019-08-11 18:50:10 【问题描述】:

我在带有react-navigation 的 React Native 应用程序中使用了选项卡导航器、堆栈导航器和切换导航器的组合。

这很好用,除了我想在每个屏幕中保留底部标签。目前,如果我导航到UserProfile 屏幕,那么底部的标签就会消失。

App.js:

const TabStack = createBottomTabNavigator(
  Feed:  screen: FeedScreenStack ,
  MyProfile:  screen: ProfileScreenStack ,
);

const UserStack = createStackNavigator(
   
    UserProfile:  screen: userProfile ,
    Comments:  screen: comments 
  
);

const MainStack = createSwitchNavigator(
  
    Home: TabStack,
    User: UserStack,
    Auth: AuthStack
  ,
  
    initialRouteName: 'Home'
  
);

为了解决这个问题,我尝试从选项卡导航器中制作一个组件,然后将其导入userProfile.js,例如<BottomTab />

bottomTab.js:

const BottomTab = createBottomTabNavigator(
    Feed:  screen: FeedScreenStack ,
    MyProfile:  screen: ProfileScreenStack ,
)

export default BottomTab

但这不起作用,因为在 react-navigation 3 中我必须直接设置应用程序容器并且我不知道如何解决它。我能想到的唯一其他解决方案是创建一个自定义组件,它只是一个带有指向不同页面的按钮的栏,但我想知道我是否可以只使用 TabNavigator?

【问题讨论】:

【参考方案1】:

推荐的方法是 TabNavigation 是导航堆栈中的顶部项。在每个选项卡中,您可能有不同的 StackNavigation。如果您使用 SwitchNavigation 进行身份验证,这可能意味着登录屏幕,您可以将 SwitchNavigation 与两个子 Auth 和 Tab 放在顶部,并将 Home、User、Feed 等包含在作为 TabNavigation 子级的不同 StackNavigation 中。例如,您可以更改如下:

const TabStack = createBottomTabNavigator(
  Feed:  screen: FeedScreenStack ,
  User:  screen: UserStack ,
);

const UserStack = createStackNavigator( 
  UserProfile:  screen: userProfile ,
  Comments:  screen: comments ,
  MyProfile:  screen: ProfileScreenStack ,
);

const MainStack = createSwitchNavigator(
  Home: TabStack,
  Auth: AuthStack
,

  initialRouteName: 'Home'
);

【讨论】:

这对我不起作用,因为User 是一个可以通过单击Feed 中的一个用户到达的屏幕,它不是一个独立的屏幕。这就是为什么我最初拥有UserStack 本身的原因。是的,Auth 用于登录 那么您还需要将User 添加到您的FeedScreenStack。如果你想在这种情况下切换标签,你也需要切换标签导航,这对用户来说很烦人,我不建议这样做。 "如果你想在这种情况下切换标签,你也需要切换标签导航,这对用户来说很烦人,我不推荐这个",我不明白,你能详细说明一下到底是什么问题吗?如果你的意思是,当我从MyProfile 切换回Feed 时,我会登陆UserProfile 并且需要单击返回按钮才能完全返回Feed,那么我想我们可能只是有不同的意见用户体验。还是一般不推荐这样做? 我以这种方式阅读了 ios 人机界面指南,但我不记得由于 Tab 上的操作而看到了 Tab 的切换,但如果您认为合适,当然可以这样做你的用例更好。我个人希望在每个选项卡内都有一个带有推送和弹出功能的 Stack-Navigation,但这可能取决于具体情况。 您的建议是始终将TabNavigator 作为SwitchNavigator 内的顶部项目?

以上是关于React Native - 如何在每个屏幕中保留 TabNavigator的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 React-Native 在 iOS 中禁用屏幕截图

react-native-navigation如何在`shouldComponentUpdate`中检测当前屏幕

你如何检测是不是在 react-native 中点击了屏幕的右半部分?

如何从 iOS 中删除 react-native-firebase,同时将其保留在 Android 中?

我如何在 React-Native 中使用 agora 视频通话共享手机屏幕

如何在 ios 上的 react-native-navigation(V1) 中添加后退按钮以关闭模式屏幕