目录
一、每个 App 都少不了的导航功能
二、本次要实现的目标效果
三、react-navigation 初探使用 TabNavigator
1.安装
2.路由配置
三、react-navigation 初探使用 StackNavigator 二级页面跳转
首页 web前端 js教程 React-Native如何制作导航?react-native导航条制作详情(附完整代码)

React-Native如何制作导航?react-native导航条制作详情(附完整代码)

Sep 11, 2018 pm 02:27 PM
android react-native

本篇文章主要的介绍了关于react-native导航的功能,如何用react做成可以导航的呢,那就看下面的这篇文章吧

一、每个 App 都少不了的导航功能

我们知道无论是底部 Button 切换,还是页面跳转统称为导航功能,有了这些功能,一个完整的 App 基本骨架才会出来,接下来才能用业务逻辑去填充整个骨架,在 React-Native 中,Facebook 也推出过导航组件,但是,面对复杂的业务逻辑性能相对来说体验较差,于是,第三方导航组件  react-navigation 诞生了,Facebook 也推荐使用该组件,可见这个导航组件能力超群,这个组件里面主要包括三个核心功能组件:TabNavigator、StackNavigator、DrawerNavigation,分别实现的功能: Tab 导航、页面跳转、抽屉效果(侧滑菜单),今天只记录前两个组件。

二、本次要实现的目标效果

50.png51.png

本次要实现的就是上面的两张截图效果,主界面底部有三个切换主界面导航的 Tab,首页模拟给出一个进入二级页面的入口,进入第二张截图效果,接下来用代码实现。

三、react-navigation 初探使用 TabNavigator

1.安装

安装:npm install –save react-navigation -save

安装完之后查看 package.json 文件里面 dependencies 对应的值会多一个 key-value 对应的react-navigation 和版本号:
52.png也可以在根目录下的 node_modules 文件夹中查看 react-navigation 组件包,如果有基本上就可以确定安装成功了。

2.路由配置

个人觉得 RN 中的 Tab 导航比 Android 操作简单,RN 是自己去配置好每个 Tab 对应的页面切换目标,一切都要自己去配置,基本框架配置好之后随处可用,下面先攻克底部 Tab 切换功能。(想看更多就到PHP中文网React参考手册栏目中学习)

界面分析:

  1. 底部三个 Tab 按钮(使用 TabNavigator 实现)

  2. 每个 Tab 对应三个不同的页面(需要准备三个页面)

根据以上简单分析,我们先创建三个页面,我自己起名字分别为:MainPage、SettingPage、MinePage,分别对应:首页,设置,我的

MainPage.js

import React, { Component } from 'react';
import {
    AppRegistry,
    StyleSheet,
    Text,
    Image,
    View,
    TouchableOpacity
} from 'react-native';
export default class MinePage extends Component {
    // 此处设置 Tab 的名称和一些样式,这里的会覆盖掉配置路由文件的样式,下面会讲
    static navigationOptions = {
        headerTitle: '首页',
        tabBarLabel: '首页',
        tabBarIcon:<Image style={{height: 30, width: 30}}
                          source={require(&#39;./ic_tab_mine.png&#39;)}/>
    };
    render() {        const { navigate } = this.props.navigation;        return (
            <View style={styles.container}>
                <Text>首页界面</Text>
            </View>
        );
    }
}const styles = StyleSheet.create({
    container: {
        flex: 1,
        backgroundColor: &#39;#F5FCFF&#39;,
    },
});
登录后复制

其他两个页面以此类推。

页面准备完之后,接下来创建 Tab 导航路由配置文件,起名:MyNavigators.js

import React from &#39;react&#39;;
import {StackNavigator, TabNavigator} from &#39;react-navigation&#39;;
import MainPage from &#39;../pages/MainPage&#39;;   // 首页import SettingPage from &#39;../pages/SettingPage&#39;;   // 设置页面import MinePage from &#39;../pages/MinePage&#39;;          // 我的页面import DetailsPage from &#39;../pages/DetailsPage&#39;;     // 详情页// 注册tabsconst Tabs = TabNavigator({
    Home: {
        screen: MainPage,
    },
    Set: {
        screen: SettingPage,
    },
    Me: {
        screen: MinePage,
    }
}, {
    animationEnabled: false, // 切换页面时是否有动画效果
    tabBarPosition: &#39;bottom&#39;, // 显示在底端,android 默认是显示在页面顶端的
    swipeEnabled: false, // 是否可以左右滑动切换tab
    backBehavior: &#39;none&#39;, // 按 back 键是否跳转到第一个Tab(首页), none 为不跳转
    tabBarOptions: {
        activeTintColor: &#39;#ff8500&#39;, // 文字和图片选中颜色
        inactiveTintColor: &#39;#999&#39;, // 文字和图片未选中颜色
        showIcon: true, // android 默认不显示 icon, 需要设置为 true 才会显示
        indicatorStyle: {
            height: 0  // 如TabBar下面显示有一条线,可以设高度为0后隐藏
        },
        style: {
            backgroundColor: &#39;#fff&#39;, // TabBar 背景色
        },
        labelStyle: {
            fontSize: 14, // 文字大小
        },
    },
});
export default StackNavigator({
        Main: {
            screen: Tabs
        },
        DetailsPage: { // 详情页
            screen: DetailsPage
        },
    },
    {
        headerMode: &#39;screen&#39;,  // 标题导航
        initialRouteName: &#39;Main&#39;, // 默认先加载的页面组件
        mode: &#39;modal&#39;       // 定义跳转风格(card、modal)
    });
登录后复制

注册 TabNavigator 接收两个参数(Tab 目标页面,tab 的一些样式),目标页面将刚刚准备好的导入即可,样式可根据需求定义。

配置页面组件堆栈路由功能 StackNavigator,注意,这里要将 App 中所有的页面组件全部配置到这里来,就好比 Android 中的 manifest 文件中注册所有的 activity 一样。

再注意:Tab 作为一个整体组件,要以页面组件的形式将对应的所有页面配置到这里。

开始使用,为了提高项目代码逻辑可读性,我先单独创建了一个 App.js 文件,然后单独放入我刚刚创建的路由组件。

import React, {Component} from &#39;react&#39;;import MyNavigators from &#39;./src/navigators/MyNavigators&#39;;
export default class App extends Component {
    render() {        return (            // 路由组件
            <MyNavigators/>
        );
    }
}
登录后复制

修改 index.js 文件,让程序启动后去加载 App.js 文件。

import { AppRegistry } from &#39;react-native&#39;;import App from &#39;./App&#39;;
AppRegistry.registerComponent(&#39;AbcAPP&#39;, () => App);
登录后复制

现在去运行程序即可看到底部导航 Tab 已经加载出来。

三、react-navigation 初探使用 StackNavigator 二级页面跳转

只要在 StackNavigator 注册过的组件 ,都会有这个属性 navigation,而这个属性里面有个 navigate(str,prm)方法,第一个参数是目标组件名称(名称是在 路由配置文件注册是自定义的名字,别和文件名搞混了)第二个参数可传可不传,如果两个页面组件要通信,例如带参跳转时,可以用第二参数传值,格式key-value。例如效果图那样:

MainPage.js 文件

import React, { Component } from &#39;react&#39;;
import {
    StyleSheet,
    Text,
    View,
    Image,
    TouchableOpacity
} from &#39;react-native&#39;;
export default class MainPage extends Component {
    static navigationOptions = {        // headerTitle:&#39;首页&#39;,
        tabBarLabel: &#39;首页&#39;,        // headerTitleStyle:{
        //     fontSize:18,
        //     fontWeight:&#39;400&#39;,
        //     alignSelf:&#39;center&#39;,
        // },
        headerStyle: {
            height: 0, //去掉标题
        },
        tabBarIcon:<Image style={{height: 30, width: 30}}
                          source={require(&#39;./ic_tab_mine.png&#39;)}/>
    };
    render() {        // 获取 navigate 属性
        const { navigate } = this.props.navigation;        return (
            <View style={styles.container}>                // 跳转到详情页,并传递两个数据 title、des。
                <TouchableOpacity style={{width:200,height: 50, backgroundColor: &#39;red&#39;, borderRadius:5,justifyContent: &#39;center&#39;, alignItems: &#39;center&#39;}}
                                  onPress={() => navigate(&#39;DetailsPage&#39;, { title: &#39;详情页&#39;,des:&#39;回到上一页&#39; })} >
                    <Text style={{color:"#FFF"}}>点击查看详情</Text>
                </TouchableOpacity>
            </View>
        );
    }
}const styles = StyleSheet.create({
    container: {
        flex: 1,
        backgroundColor: &#39;#F5FCFF&#39;,
        justifyContent: &#39;center&#39;,
        alignItems: &#39;center&#39;
    },
});
登录后复制

DetailsPage.js 文件(记得要在 MyNavigators.js 注册详情页组件)

import React, {Component} from &#39;react&#39;;
import {
    StyleSheet,
    Text,
    View,
    TouchableOpacity
} from &#39;react-native&#39;;
export default class DetailsPage extends Component {
    //接收上一个页面传过来的title显示出来
    static navigationOptions = ({navigation}) => ({
        headerTitle: navigation.state.params.title,
        headerTitleStyle:{
            fontSize:18,
            fontWeight:&#39;400&#39;,
            alignSelf:&#39;center&#39;
        },
        headerStyle: {height: 65, backgroundColor: &#39;#FFF&#39;},
        headerRight: <View><Text style={{paddingRight: 14, color: &#39;#000&#39;, fontSize: 18}}>编辑</Text></View>,
        headerBackTitle: &#39;回去&#39;,
        headerTruncatedBackTitle: &#39;返回&#39;
    });    // 点击返回上一页方法
    backFunction= () => {        //返回首页方法 navigation属性中的自带的返回方法
        this.props.navigation.goBack();
    }
    render() {        return (
            <View style={styles.container}>
                <TouchableOpacity
                    style={{width:200,height: 50, backgroundColor: &#39;green&#39;, borderRadius:5,justifyContent: &#39;center&#39;, alignItems: &#39;center&#39;}}
                    onPress={() => {                        this.backFunction()
                    }}>
                    <Text style={{color:"#FFF"}}>{this.props.navigation.state.params.des}</Text>
                </TouchableOpacity>
            </View>
        );
    }
}
const styles = StyleSheet.create({    container: {
        flex: 1,
        backgroundColor: &#39;#F5FCFF&#39;,
        alignItems:&#39;center&#39;,
        justifyContent:&#39;center&#39;
    },
});
登录后复制

记录完毕,以上使用到的属性值、样式等等可以网上自行百度。最后给出项目结构目录: 

53.png

本篇文章到这就结束了(想看更多就到PHP中文网React使用手册栏目中学习),有问题的可以在下方留言提问。

以上是React-Native如何制作导航?react-native导航条制作详情(附完整代码)的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它们
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

新报告对传闻中的三星 Galaxy S25、Galaxy S25 Plus 和 Galaxy S25 Ultra 相机升级进行了严厉的评估 新报告对传闻中的三星 Galaxy S25、Galaxy S25 Plus 和 Galaxy S25 Ultra 相机升级进行了严厉的评估 Sep 12, 2024 pm 12:23 PM

最近几天,Ice Universe 不断披露有关 Galaxy S25 Ultra 的详细信息,人们普遍认为这款手机将是三星的下一款旗舰智能手机。除此之外,泄密者声称三星只计划升级一款相机

三星 Galaxy S25 Ultra 泄露了第一张渲染图,传闻中的设计变化被曝光 三星 Galaxy S25 Ultra 泄露了第一张渲染图,传闻中的设计变化被曝光 Sep 11, 2024 am 06:37 AM

OnLeaks 现在与 Android Headlines 合作,首次展示了 Galaxy S25 Ultra,几天前,他试图从他的 X(以前的 Twitter)粉丝那里筹集到 4,000 美元以上的资金,但失败了。对于上下文,嵌入在 h 下面的渲染图像

IFA 2024 | TCL 的 NXTPAPER 14 在性能上无法与 Galaxy Tab S10 Ultra 相媲美,但在尺寸上几乎可以与之媲美 IFA 2024 | TCL 的 NXTPAPER 14 在性能上无法与 Galaxy Tab S10 Ultra 相媲美,但在尺寸上几乎可以与之媲美 Sep 07, 2024 am 06:35 AM

除了发布两款新智能手机外,TCL 还发布了一款名为 NXTPAPER 14 的新 Android 平板电脑,其大屏幕尺寸是其卖点之一。 NXTPAPER 14 采用 TCL 标志性品牌哑光液晶面板 3.0 版本

Vivo Y300 Pro 在 7.69 毫米纤薄机身中配备 6,500 mAh 电池 Vivo Y300 Pro 在 7.69 毫米纤薄机身中配备 6,500 mAh 电池 Sep 07, 2024 am 06:39 AM

Vivo Y300 Pro刚刚全面亮相,它是最薄的中端Android手机之一,配备大电池。准确来说,这款智能手机的厚度仅为 7.69 毫米,但配备了 6,500 mAh 的电池。这与最近推出的容量相同

三星 Galaxy S24 FE 预计将以低于预期的价格推出,有四种颜色和两种内存选项 三星 Galaxy S24 FE 预计将以低于预期的价格推出,有四种颜色和两种内存选项 Sep 12, 2024 pm 09:21 PM

三星尚未就何时更新其 Fan Edition (FE) 智能手机系列提供任何提示。目前来看,Galaxy S23 FE 仍然是该公司的最新版本,于 2023 年 10 月年初推出。

新报告对传闻中的三星 Galaxy S25、Galaxy S25 Plus 和 Galaxy S25 Ultra 相机升级进行了严厉的评估 新报告对传闻中的三星 Galaxy S25、Galaxy S25 Plus 和 Galaxy S25 Ultra 相机升级进行了严厉的评估 Sep 12, 2024 pm 12:22 PM

最近几天,Ice Universe 不断披露有关 Galaxy S25 Ultra 的详细信息,人们普遍认为这款手机将是三星的下一款旗舰智能手机。除此之外,泄密者声称三星只计划升级一款相机

小米红米 Note 14 Pro Plus 上市,成为首款配备 Light Hunter 800 摄像头的高通 Snapdragon 7s Gen 3 智能手机 小米红米 Note 14 Pro Plus 上市,成为首款配备 Light Hunter 800 摄像头的高通 Snapdragon 7s Gen 3 智能手机 Sep 27, 2024 am 06:23 AM

Redmi Note 14 Pro Plus 现已正式成为去年 Redmi Note 13 Pro Plus 的直接后继产品(亚马逊售价 375 美元)。正如预期的那样,Redmi Note 14 Pro Plus与Redmi Note 14和Redmi Note 14 Pro一起成为Redmi Note 14系列的主角。李

iQOO Z9 Turbo Plus:可能增强的系列旗舰产品已开始预订 iQOO Z9 Turbo Plus:可能增强的系列旗舰产品已开始预订 Sep 10, 2024 am 06:45 AM

OnePlus的姐妹品牌iQOO的2023-4年产品周期可能即将结束;尽管如此,该品牌已宣布 Z9 系列的开发尚未结束。它的最终版,也可能是最高端的 Turbo+ 变体刚刚按照预测发布。时间

See all articles