原生项目中,我们对底部Tab 很熟悉,点击Tab标签可以切换页面,那么在React-Native 中我们该怎么实现呢。

在查了文档后,我们找到了一个TabBarIos ,这个是ios 下使用的Tab 标签,但是没有找到Android 可以使用的,因此 我们需要自己实现,或者使用第三方的,这里,刚接触React不太会自己实现,因此使用github上开源的react-native-tab-navigator,来实现切换的功能。

使用步骤:

安装

Make sure that you are in your React Native project directory and run:

npm install react-native-tab-navigator --save

使用

Import TabNavigator as a JavaScript module:

import TabNavigator from 'react-native-tab-navigator';

This is an example of how to use the component and some of the commonly used props that it supports:

<TabNavigator>
  <TabNavigator.Item
    selected={this.state.selectedTab === 'home'}
    title="Home"
    renderIcon={() => <Image source={...} />}
    renderSelectedIcon={() => <Image source={...} />}
    badgeText="1"
    onPress={() => this.setState({ selectedTab: 'home' })}>
    {homeView}
  </TabNavigator.Item>
  <TabNavigator.Item
    selected={this.state.selectedTab === 'profile'}
    title="Profile"
    renderIcon={() => <Image source={...} />}
    renderSelectedIcon={() => <Image source={...} />}
    renderBadge={() => <CustomBadgeView />}
    onPress={() => this.setState({ selectedTab: 'profile' })}>
    {profileView}
  </TabNavigator.Item>
</TabNavigator>

See TabNavigatorItem's supported props for more info.

/**
 * tabbar  demo
 */

'use strict'
import TabNavigator from 'react-native-tab-navigator'
import React, {Component} from 'react';
import styles from '../Styles/Main';
import MovieList from './MovieList';
import {
    View,
    Image,
}from 'react-native';
import USBox from "./USBox";
const TAB_NORMAL_1=require('../Images/bottom_bar_01.png');
const TAB_PRESS_1 =require('../Images/bottom_bar_01_selected.png');
const TAB_NORMAL_2=require('../Images/bottom_bar_02.png');
const TAB_PRESS_2=require('../Images/bottom_bar_02_selected.png');
export default class TabBarComponent extends Component{

    constructor(props) {
        super(props);
        this.state={
            selectedTab:'home',
        }
    }
        render(){
            return(
                <View  style={styles.Container}>

                    <TabNavigator>
                        <TabNavigator.Item
                            selected={this.state.selectedTab === 'home'}
                            title="Home"
                            renderIcon={() => <Image source={TAB_NORMAL_1} style ={styles.icon} />}
                            renderSelectedIcon={() => <Image source={TAB_PRESS_1}style ={styles.icon}  />}
                            badgeText="1"
                            onPress={() => this.setState({ selectedTab: 'home' })}>
                            <MovieList />
                        </TabNavigator.Item>
                        <TabNavigator.Item
                            selected={this.state.selectedTab === 'profile'}
                            title="Profile"
                            renderIcon={() => <Image source={TAB_NORMAL_2} style ={styles.icon} />}
                            renderSelectedIcon={() => <Image source={TAB_PRESS_2} style ={styles.icon} />}

                            onPress={() => this.setState({ selectedTab: 'profile' })}>
                            <USBox />
                        </TabNavigator.Item>
                    </TabNavigator>
                </View>
            );
    }
}

实现Tab切换功能的代码就是 return 中的TabNavigator ,这里我添加了两个Tab标签。

标签构建基本介绍:

selected: bool型,是否选中状态,可使用setState进行控制,默认false
title: 标题,String类型,非必填
renderIcon: 必填项,即图标,但为function类型,所以这里需要用到Arrow Function
renderSelectedIcon: 选中状态的图标,非必填,也是function类型
onPress: function型,即点击事件的回调函数,这里需要控制的是state,而切换页面已经由控件本身帮我们实现好了

ps:记得在构造方法中指定默认选中标签: selectedTab。

指定两个Tab 切换要展示的页面  <MovieList />和 <USBox />。

实现效果:

源码下载

-----------------------------期待大神们的到来

------------------------一---起分享,一起进步!需要你们

React-Native进阶_4.底部标签栏TabBar的更多相关文章

  1. [RN] React Native 下实现底部标签(支持滑动切换)

    上一篇文章 [RN] React Native 下实现底部标签(不支持滑动切换) 总结了不支持滑动切换的方法,此篇文章总结出 支持滑动 的方法 准备工作之类的,跟上文类似,大家可点击上文查看相关内容. ...

  2. react native进阶

    一.前沿||潜心修心,学无止尽.生活如此,coding亦然.本人鸟窝,一只正在求职的鸟.联系我可以直接微信:jkxx123321 二.项目总结 **||**文章参考资料:1.  http://blog ...

  3. [RN] React Native 下实现底部标签(不支持滑动切换)

    底部标签是现在App的基本菜单实现 下面分别用 createBottomTabNavigator 和 createMaterialBottomTabNavigator 两种方法分别实现底部菜单 但此两 ...

  4. React Native 学习笔记--进阶(二)--动画

    React Native 进阶(二)–动画 动画 流畅.有意义的动画对于移动应用用户体验来说是非常必要的.我们可以联合使用两个互补的系统:用于全局的布局动画LayoutAnimation,和用于创建更 ...

  5. React Native专题-江清清

    本React Native讲解专题:主要讲解了React Native开发,由基础环境搭建配置入门,基础,进阶相关讲解. 刚创建的React Native交流8群:533435865  欢迎各位大牛, ...

  6. React Native 常用插件案例

    (二).基础入门: 1.React Native For Android环境配置以及第一个实例 2.React Native开发IDE安装及配置 3.React Native应用设备运行(Runnin ...

  7. React Native专题

    转载注明出处:地址:http://www.lcode.org本文出自:[江清清的技术专栏]本React Native讲解专题:主要讲解了React Native开发,由基础环境搭建配置入门,基础,进阶 ...

  8. react native 底部按钮切换

    在react   native  中底部按钮的切换  主要的是运用的是<TabBarNavigator/>这个组件,具体的代码实现如下: render() { return ( <T ...

  9. React Native(四)——顶部以及底部导航栏实现方式

    效果图: 一步一步慢慢来: 其实刚入手做app的时候,就应该做出简单的顶部以及底部导航栏.无奈又在忙其他事情,导致这些现在才整理出来. 1.顶部导航栏:react-native-scrollable- ...

随机推荐

  1. 20145314郑凯杰《信息安全系统设计基础》第6周学习总结 part A

    第4章 处理器体系结构 part 1 本部分对改章节的知识点进行总结: 一个处理器支持的指令和指令的字节级编码称为它的指令集体系结构(ISA). 不同的出路器有不同的ISA. ISA模型看上去应该是顺 ...

  2. 20145314郑凯杰 《Java程序设计》第9周学习总结 积极主动敲代码

    20145314郑凯杰 <Java程序设计>第9周学习总结 教材学习内容总结 第十六章 ①JDBC(Java DataBase Connectivity) 即java数据库连接,是一种用于 ...

  3. 4.9版本的linux内核中eeprom存储芯片at24c512的驱动源码在哪里

    答:drivers/misc/eeprom/at24.c,内核配置项为CONFIG_EEPROM_AT24 Location: -> Device Drivers -> Misc devi ...

  4. Vue2.0 + ElementUI的+ PageHelper实现的表格分页

    参考博客:http://blog.csdn.net/u012907049/article/details/70237457 借鉴1.controller层编写 2.vue中,axios的写法(总页数等 ...

  5. 【网络结构可视化】Visualizing and Understanding Convolutional Networks(ZF-Net) 论文解析

    目录 0. 论文地址 1. 概述 2. 可视化结构 2.1 Unpooling 2.2 Rectification: 2.3 Filtering: 3. Feature Visualization 4 ...

  6. 数据结构实习 - Problem N 树的括号表示法

    writer:pprp date:20171103 题目描述 先将根结点放入一对圆括号中,然后把它的子树按由左而右的顺序放入括号中,而对子树也采用同样方法处理:同层子树与它的根结点用圆括号括起来,同层 ...

  7. 2017 beijing icpc A - Euler theorem

    2017-09-22 21:59:43 writer:pprp HazelFan is given two positive integers a,ba,b, and he wants to calc ...

  8. jquery实现全选/全不选

    //设置全选全不选$("#checkAll").click(function () { if ($("#checkAll").attr("checke ...

  9. centos mysql忘记密码

    1.停止mysql 服务:service mysqld stop; 2.vim命令打开mysql配置文件my.cnf(位置一般为:/etc/my.cnf) 3.在mysqld进程配置文件中添加skip ...

  10. .net的根目录区别

    很久没搞.net了,时间一场,全忘记了,倒,,, “~/” 是应用程序根目录“/”  也是表示根目录 “./” 是当前目录“../”表示当前目录的上一级目录