1、组件安装:npm install react-native-router-flux --save

2、定义菜单图片和文字:

  

import React, { Component } from 'react';
import { View, Image, Text, StyleSheet,Dimensions } from 'react-native';
class TabIcon extends Component {
constructor(props){
super(props);
} render(){
let selected=this.props.focused;
let data={
home:{
title:"首页",
icon:!selected?require("../resource/images/home.png"):require("../resource/images/home_selected.png")
},
movies:{
title:"电影",
icon:!selected?require("../resource/images/movies.png"):require("../resource/images/movies_selected.png")
},
theaters:{
title:"影院",
icon:!selected?require("../resource/images/theater.png"):require("../resource/images/theater_selected.png")
},
me:{
title:"我",
icon:!selected?require("../resource/images/me.png"):require("../resource/images/me_selected.png")
}
}
let param=data[this.props.navigation.state.key];
return <View style={styles.tabbarContainer}>
<Image style={{ width: 25, height: 25,resizeMode:'contain' }} source={param.icon} />
<Text style={[styles.tabbarItem,selected&&{color:'#F08519'}]}>{param.title}</Text>
</View>
}
} const styles = StyleSheet.create({
tabbarContainer:{
flex:1,
alignItems:"center",
justifyContent:"center",
width:Dimensions.get('window').width/4
},
tabbarItem:{
marginTop:5,
textAlign:"center"
}
}); module.exports = TabIcon;
  • 判断菜单是否被选中this.props.focused在老版本的react-native-router-flux使用this.props.selected;
  • 取当前菜单this.props.navigation.state.key在老版本的react-native-router-flux使用this.props.sceneKey

3、定义底部导航栏:

import React, { Component } from 'react';
import { Provider } from 'react-redux';
import PropTypes from 'prop-types';
import {
View,
Text,
BackAndroid,
StyleSheet
} from 'react-native';
import { Scene, Router, TabBar, Modal, Schema, Actions, Reducer, ActionConst } from 'react-native-router-flux';
import { connect } from 'react-redux';
import LoginPage from './modules/auth/containers/loginPage';
import HomeIndex from './modules/home/containers/indexPage';
import TabIcon from './common/tabIcon'; class AppRoot extends Component {
static propTypes = {
dispatch: PropTypes.func
} constructor(props) {
super(props);
} createReducer(params) {
const defaultReducer = Reducer(params);
return (state, action) => {
this.props.dispatch(action);
return defaultReducer(state, action);
};
} onExitApp(){
BackAndroid.exitApp();
return true;
}
render() {
return (
<Router onExitApp={this.onExitApp}
createReducer={ this.createReducer.bind(this) }
scenes={ scenes }
>
</Router >
)
}
} const styles = StyleSheet.create({
tabBarStyle: {
backgroundColor: '#fff',
height:64
},
tabBarSelectedItemStyle: {
backgroundColor: '#fff'
},
titleStyle: {
color: '#fff'
},
}) const scenes = Actions.create(
<Scene key="root" hideNavBar={true}>
<Scene key="login" component={LoginPage} title="登录" hideNavBar={true} />
<Scene key="tabbar"
initial
tabs={true}
tabBarPosition="bottom"
showLabel={false}
tabBarStyle={styles.tabBarStyle}
tabBarSelectedItemStyle={styles.tabBarSelectedItemStyle}
titleStyle={styles.titleStyle}>
<Scene key="home"
hideNavBar={true}
component={HomeIndex}
icon={TabIcon}
titleStyle={styles.titleStyle}/> <Scene key="movies"
hideNavBar={true}
component={HomeIndex}
icon={TabIcon}
titleStyle={styles.titleStyle} /> <Scene key="theaters"
hideNavBar={true}
component={HomeIndex}
icon={TabIcon}
titleStyle={styles.titleStyle} /> <Scene key="me"
hideNavBar={true}
component={LoginPage}
icon={TabIcon}
titleStyle={styles.titleStyle} />
</Scene>
</Scene>
)
export default connect()(AppRoot);

由于此示例基于redux,为完整项目结构,还需做以下处理:

  • 定义dispatch
import PropTypes from 'prop-types';
...
class AppRoot extends Component {
static propTypes = {
dispatch: PropTypes.func
}
...
}
  • 使用connect连接React组件

export default connect()(AppRoot);

  GIT源码地址:react-native-demo 分支名称:tabbar

请查看原文:https://www.jianshu.com/p/ab7eb90034fd

React-native 底部导航栏(二)的更多相关文章

  1. React Native 底部导航栏

    首先安装:npm install react-native-tab-navigator   然后再引入文件中    import TabNavigator from 'react-native-tab ...

  2. [RN] React Native 自定义导航栏随滚动渐变

    React Native 自定义导航栏随滚动渐变 实现效果预览: 代码实现: 1.定义导航栏 NavPage.js import React, {Component} from 'react'; im ...

  3. React Native自定义导航栏

    之前我们学习了可触摸组件和页面导航的使用的使用: 从零学React Native之09可触摸组件 - 从零学React Native之03页面导航 - 经过之前的学习, 我们可以完成一个自定义导航栏了 ...

  4. react native底部tab栏切换

    1.安装tab栏插件 npm i react-native-tab-navigator --save 2.引入对应的组件和tab插件 import { Platform, StyleSheet, Te ...

  5. React Native 之导航栏

    一定要参考官网: https://reactnavigation.org/docs/en/getting-started.html 代码来自慕课网:https://www.imooc.com/cour ...

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

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

  7. 二、Fragment+RadioButton实现底部导航栏

    在App中经常看到这样的tab底部导航栏   那么这种效果是如何实现,实现的方式有很多种,最常见的就是使用Fragment+RadioButton去实现.下面我们来写一个例子 首先我们先在activi ...

  8. TextView+Fragment实现底部导航栏

    前言:项目第二版刚上线没多久,产品又对需求进行了大改动,以前用的是左滑菜单,现在又要换成底部导航栏,于是今天又苦逼加班了.花了几个小时实现了一个底部导航栏的demo,然后总结一下.写一篇博客.供自己以 ...

  9. Android 修改底部导航栏navigationbar的颜色

    Android 修改底部导航栏navigationbar的颜色 getWindow().setNavigationBarColor(Color.BLUE); //写法一 getWindow().set ...

随机推荐

  1. 解决eclipse无法部署工程到tomcat运行的问题

    当在tomcat想加入工程时在列表没发现要的项目时, 引起这个错误提示的原因是:项目里的.project文件和.settings文件的缺失或者错误.而不能适用于现在的tomcat. 解决办法如下: 右 ...

  2. C++入门经典-例2.7-控制cout打印格式程序

    1:代码如下: // 2.7.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #incl ...

  3. DeepFaceLab: 可视化交互式合成功能简介!

    DeepFaceLab在沉寂了几个月后(目测Iperov同志讨生活去了),在8月下旬又迎来了重大更新.我总结了一下,主要是更新了三大功能. 新增Avatar模型 交互式转换器 半脸模型支持FAN ​ ...

  4. 浏览器端-W3School-HTML:HTML DOM Audio 对象

    ylbtech-浏览器端-W3School-HTML:HTML DOM Audio 对象 1.返回顶部 1. HTML DOM Audio 对象 Audio 对象 Audio 对象是 HTML5 中的 ...

  5. PHP结合Ueditor并修改图片上传路径 微信小程序 拼接域名显示图片

    前言 在使用UEditor编辑器时,一般我们都是需要修改默认的图片上传路径的,下面是我整理好的修改位置和方法供大家参考. 操作 Ueditor PHP版本本身自带了一套上传程序,我们可以在此基础中,找 ...

  6. Capabilities 入门教程:基础实战篇

    该系列文章总共分为三篇: Linux Capabilities 入门教程:概念篇 Linux Capabilities 入门教程:基础实战篇 待续... 上篇文章介绍了 Linux capabilit ...

  7. opencv的频域滤波

    下面是频域滤波示例程序: 在本程序中,共有五个自定义函数,分别是: 1. myMagnitude(),在该函数中封装了Opencv中的magnitude函数,实现对于复数图像的幅值计算. 2. dft ...

  8. CTF—WEB—sql注入之无过滤有回显最简单注入

    sql注入基础原理 一.Sql注入简介 Sql 注入攻击是通过将恶意的 Sql 查询或添加语句插入到应用的输入参数中,再在后台 Sql 服务器上解析执行进行的攻击,它目前黑客对数据库进行攻击的最常用手 ...

  9. Java基础之Volatile原理

    原文链接: http://www.aoaoyi.com/archives/956.html 计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据 的读取和写入.由于程序运 ...

  10. 解决ajax跨越问题

    解决方案: ajax跨域访问是一个老问题了,解决方法很多,比较常用的是JSONP方法,JSONP方法是一种非官方方法,而且这种方法只支持GET方式,不如POST方式安全.   如果跨域使用POST方式 ...