前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Rn使用@react-navigation/native配置页面路由以及导航栏

Rn使用@react-navigation/native配置页面路由以及导航栏

作者头像
明知山
发布2021-07-01 10:27:04
3.2K0
发布2021-07-01 10:27:04
举报
文章被收录于专栏:前端开发随笔
在这里插入图片描述
在这里插入图片描述

reactnavigation官方文档 依照文档说明需要安装以下依赖

代码语言:javascript
复制
npm install @react-navigation/native
代码语言:javascript
复制
npm install react-native-reanimated react-native-gesture-handler react-native-screens react-native-safe-area-context @react-native-community/masked-view

安装主要的两个依赖

页面导航
代码语言:javascript
复制
npm install @react-navigation/stack
tabbar导航
代码语言:javascript
复制
npm install @react-navigation/bottom-tabs
在这里插入图片描述
在这里插入图片描述

这是我的项目文件目录 因为之前是个Vue开发者,项目目录会沿用熟悉的一套 在src目录下新建router文件夹 里面放置index.js,StackNavigator.js,TabNavigator.js三个文件夹 路由进行集中管理

index.js

集中导入所有的项目文件

代码语言:javascript
复制
const router = [
    {
        name: "Index", //跳转路径
        title: "明知山", //头部展示标题
        component: require("./TabNavigator").default,
    },
    //下面只需要配置非tabbar页面路径
    {
        name: "Detail",
        title: "详情",
        component: require("../views/Detail/Detail").default
    },
    {
        name: "Life",
        title: "生命周期",
        component: require("../views/Life/Life").default
    },
]
export default router

TabNavigator.js

配置tabbar导航栏

代码语言:javascript
复制
import React from 'react';
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
const Tab = createBottomTabNavigator();
import { Image, StyleSheet } from "react-native"

const tabbar = [
    {
        name: "首页",
        component: require("../views/Index/Index").default,
        icon: require("../assets/img/1.png"),
        selectIcon: require("../assets/img/s1.png")
    },
    {
        name: "我的",
        component: require("../views/Mine/Mine").default,
        icon: require("../assets/img/2.png"),
        selectIcon: require("../assets/img/s2.png")
    },
]

const TabNavigator = () => {
    return (
        <Tab.Navigator
            tabBarOptions={{
                activeTintColor: '#2C3167',
            }}>
            {
                tabbar.map((item, index) => {
                    return (
                        <Tab.Screen key={index} name={item.name} component={item.component}
                            options={{
                                tabBarIcon: ({ focused }) => (
                                    <Image source={focused ? item.selectIcon : item.icon} style={[styles.image]} />
                                ),
                            }}
                        />
                    )
                })
            }
        </Tab.Navigator>
    );
}

const styles = StyleSheet.create({
    image: {
        width: 20,
        height: 20,
    },
});

export default TabNavigator;

StackNavigator.js

配置页面导航路由

代码语言:javascript
复制
import React from 'react';
import { createStackNavigator } from '@react-navigation/stack';
import { getFocusedRouteNameFromRoute } from '@react-navigation/native';
const Stack = createStackNavigator();
import router from "./index"
const StackNavigator = () => {
    //从子导航器获取路由名称
    const getChildTitle = (route) => {
        const routeName = getFocusedRouteNameFromRoute(route);
        return routeName
    }
    return (
        <Stack.Navigator>
            {
                router.map((item, index) => {
                    return (
                        <Stack.Screen key={index} name={item.name} component={item.component} options={({ route }) => ({
                            title: getChildTitle(route) || item.title,
                            headerStyle: {
                                backgroundColor: '#fff',
                                height: 40
                            },
                            headerTitleStyle: {
                                color: '#000',
                                fontSize: 15
                            },
                            // headerShown: false, //不显示头部标题
                        })} />
                    )
                })
            }
        </Stack.Navigator>
    );
}

export default StackNavigator;

App.js

导入到App.js里进行显示

代码语言:javascript
复制
import 'react-native-gesture-handler'
import * as React from 'react';
import { NavigationContainer } from '@react-navigation/native';
import StackNavigator from "./src/router/StackNavigator"
const App = () => {
  return (
    <NavigationContainer>
      <StackNavigator />
    </NavigationContainer>
  );
}

export default App;

Github源码

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/06/29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 页面导航
  • tabbar导航
  • index.js
  • TabNavigator.js
  • StackNavigator.js
  • App.js
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档