reactjs - 如何在 react-navigation v5 中同时渲染 Tab 导航和抽屉导航
问题描述
我希望在我的应用程序中同时呈现抽屉导航和选项卡导航组件。
我创建了一个名为的文件root.js
,并在该文件中写入了两个组件:
import React, {Fragment} from 'react';
import { createDrawerNavigator } from '@react-navigation/drawer';
import { NavigationContainer } from '@react-navigation/native';
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
import { Login, SecondPage, ThirdPage } from './components/index';
const Tab = createBottomTabNavigator();
const Drawer = createDrawerNavigator();
这是组件:
const MainDrawer = () => {
return (
<Fragment>
<NavigationContainer >
<Drawer.Navigator>
<Drawer.Screen name="Login" component={Login} />
<Drawer.Screen name="Second Page" component={SecondPage} />
<Drawer.Screen name="Third Page" component={ThirdPage} />
</Drawer.Navigator>
</NavigationContainer>
<NavigationContainer>
<Tab.Navigator>
<Tab.Screen name="Login" component={Login} />
<Tab.Screen name="Settings" component={SecondPage} />
<Tab.Screen name="Third Page" component={ThirdPage} />
</Tab.Navigator>
</NavigationContainer>
</Fragment>
)
export default MainDrawer;
但是正如您在以下屏幕截图中看到的那样,组件被重复了,我如何合并这两个组件并将它们呈现为一个组件?
解决方案
使用单个NavigationContainer
. 把你Tab.Navigator
作为你的第一个屏幕。
const LoginWithTabs = () => {
const Tab = createBottomTabNavigator()
return (
<Tab.Navigator>
<Tab.Screen name="Login" component={Login} />
<Tab.Screen name="Settings" component={SecondPage} />
<Tab.Screen name="Third Page" component={ThirdPage} />
</Tab.Navigator>
)
}
const MainDrawer = () => {
return (
<NavigationContainer >
<Drawer.Navigator>
<Drawer.Screen name="LoginWithTabs" component={LoginWithTabs} />
<Drawer.Screen name="Second Page" component={SecondPage} />
<Drawer.Screen name="Third Page" component={ThirdPage} />
</Drawer.Navigator>
</NavigationContainer>
)
export default MainDrawer;
请注意,您的抽屉将包含 3 个条目,如果您选择“第二页”,您将被重定向到SecondPage
并且您不会看到选项卡。如果您想要更复杂的行为,您需要创建一个自定义组件来替换抽屉的默认组件。
推荐阅读
- twilio - 使用 Twilio 的客户端到客户端 VoIP 语音 SDK 呼叫
- javascript - 我可以直接通过azure中的clientId等url片段获取令牌吗?
- docker-compose - 如果我在 Docker Compose 中使用“restart: always”运行 node.js 应用程序,我还需要像 PM2 这样的进程管理器吗?
- fastapi - python fastapi:我想得到一个csv文件作为回报
- html - 如何参考 selenium 编写 vba 代码以单击基于模态的边缘浏览器中弹出窗口的关闭按钮
- r - 在使用 prcomp() 执行 PCA 之前,将常量添加到有意义的 0 值并在 R 中输入缺失数据
- ruby-on-rails - 邪恶的 PDF 不显示 webp 格式的图像
- javascript - 从一个组件修改Tab Bar的值(react-navigation 6)
- asp.net - allowDefinition='MachineToApplication' 超出级别
- laravel - Laravel 和 Docker 权限问题 - 无法保存文件