Demo简单描述:点击底部菜单可切换页面,并且底部为共用。

这个是在设置好导航Navigator之后进行的步骤,只是我个人进行Tab切换的一种思路方法,或许不是最好的,仅供参考一下。

首先我们需要一个全局变量来方便我们进行Tab的当前页面active判断及页面路由的改变,添加currentActiveTab.js:

// 默认为首页
export default{
currentActiveFooterTab: "home"
}

接着我们来写<TabsFooter>,通过全局变量currentActiveFooterTab来判断当前页面Tab的active,同时也要点击可进行页面切换:

TabsFooter.js:

import React, { Component } from 'react';
import {
Navigator
} from 'react-native';
import {
Button,
Container,
Content,
Footer,
FooterTab,
Header,
Icon,
Title
} from 'native-base'; import CourseListView from '../views/CourseListView.js';
import PersonView from './PersonView.js'; import myTheme from '../themes/myTheme';
import CurrentActiveTab from '../services/currentActiveTab.js'; export default class TabsFooter extends Component {
constructor(props) {
super(props);
this.homeTab = false;
this.liveTab = false;
this.spaceTab = false;
this.personTab = false;
if (CurrentActiveTab.currentActiveFooterTab == 'home') {
this.homeTab = true;
}
if (CurrentActiveTab.currentActiveFooterTab == 'live') {
this.liveTab = true;
}
if (CurrentActiveTab.currentActiveFooterTab == 'space') {
this.spaceTab = true;
}
if (CurrentActiveTab.currentActiveFooterTab == 'person') {
this.personTab = true;
}
} _navigate(name, component, type = 'Normal') {
this.props.navigator.push({
component: component,
name: name,
passProps: {
name: name
},
type: type
})
} render() {
return (
<FooterTab theme={myTheme}>
<Button transparent active={this.homeTab} onPress={
()=>{if(CurrentActiveTab.currentActiveFooterTab != 'home') this._navigate('首页',CourseListView)}
}>
<Icon name='ios-home'/>首页
</Button>
<Button transparent active={this.liveTab}>
<Icon name='logo-youtube'/>直播
</Button>
<Button transparent active={this.spaceTab}>
<Icon name='md-chatbubbles'/>广场
</Button>
<Button transparent active={this.personTab} onPress={
()=>{if(CurrentActiveTab.currentActiveFooterTab != 'person') this._navigate('个人',PersonView)}
}>
<Icon name='md-person'/>个人
</Button>
</FooterTab>
)
}
};

在首页的页面,也就是“课程”页面,我们要进行全局变量的改变,同时也要将navigator传到TabsFooter中:

import React, { Component } from 'react';
import {
Navigator,
Text
} from 'react-native';
import {
Button,
Container,
Content,
Footer,
FooterTab,
Header,
Icon,
Title
} from 'native-base'; import CourseDetailView from './CourseDetailView.js';
import TabsFooter from './TabsFooter.js'; import myTheme from '../themes/myTheme';
import CurrentActiveTab from '../services/currentActiveTab.js'; export default class CourseListView extends Component {
constructor(props) {
super(props);
CurrentActiveTab.currentActiveFooterTab = 'home';
} _navigate(name,component, type = 'Normal') {
this.props.navigator.push({
component: component,
name: name,
passProps: {
name: name
},
type: type
})
} render() {
return (
<Container theme={myTheme}>
<Header>
<Title>课程</Title>
</Header>
<Content>
<Button block style={{marginTop:30}} onPress={()=>this._navigate('课程详情',CourseDetailView)}>我是课程</Button>
</Content>
<Footer>
<TabsFooter navigator={this.props.navigator} />
</Footer>
</Container>
);
}
}

同样的,在个人中心页面,我们需要把全局变量设为CurrentActiveTab.currentActiveFooterTab = 'person';

这样就可以实现Tab的切换了,TabActive样式我们可以通过自定义设置。

底部TabsFooter的更多相关文章

  1. CSS布局之div交叉排布与底部对齐--flex实现

    最近在用wordpress写页面时,设计师给出了一种网页排布图样,之前从未遇到过,其在电脑上(分辨率大于768px)的效果图如下: 而在手机(分辨率小于等于768px)上要求这样排列: 我想到了两种方 ...

  2. Android ScrollView监听滑动到顶部和底部的两种方式(你可能不知道的细节)

    Android ScrollView监听滑动到顶部和底部,虽然网上很多资料都有说,但是不全,而且有些细节没说清楚 使用场景: 1. 做一些复杂动画的时候,需要动态判断当前的ScrollView是否滚动 ...

  3. js判断窗体或容器滚动条到底部

    NO1---jquery判断窗体滚动条到底部 $(window).scroll(function () {if ($(window).scrollTop() >= $(document).hei ...

  4. [deviceone开发]-底部弹出选择

    一.简介 个人上传的第一个示例源码,两天空闲时间写的,一点简单组件,写的挺乱还没啥注释,仅供新手学习. 底部弹出选择,可滑动选择选项,如果停留在选项中间,可自动校正位置,加了一点简单的动画效果,需要的 ...

  5. 块级标签包含行内标签底部出现3px间隔的解决办法

    当块级标签(如div)内包含了行内标签(如img),则外层元素与内层元素底部会出现3px的间隔: 代码如下: <!doctype html> <html lang="en& ...

  6. navigationController 去掉背景图片、去掉底部线条

    //去掉背景图片 [self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc] init] forBarMe ...

  7. Android 底部弹出Dialog(横向满屏)

    项目中经常需要底部弹出框,这里我整理一下其中我用的比较顺手的一个方式(底部弹出一个横向满屏的dialog). 效果图如下所示(只显示关键部分): 步骤如下所示: 1.定义一个dialog的布局(lay ...

  8. RecyclerView如何消除底部的分割线

    最近遇到一个问题,用RecyclerView显示数据,纵向列表显示,添加默认分割线.   问题是:底部也会显示分割线,这很影响美观.   怎么解决这个问题呢?我想了很多办法,毫无头绪...   最后, ...

  9. 一个将 footer 保持在底部的最好方法

    原文: Quick Tip: The Best Way To Make Sticky Footers 当你在布局网页时,有可能会遇到类似下面的这种情况 导致这一问题的原因是页面内容太少,无法将内容区域 ...

随机推荐

  1. Treblecross(uva 10561)

    题意:一个 1 × n 的棋盘,有 X 和 :,当棋盘上出现三个连续的X 时游戏结束,两人轮流操作,每次能把一个 : 变成 X,问先手必胜方案数以及先手可以放的位置. /* 对于先手,当有一个'X'时 ...

  2. .NET4.5,MVC4preview,VS2011preview.都来了

    原文发布时间为:2011-11-06 -- 来源于本人的百度文章 [由搬家工具导入] http://weblogs.asp.net/jgalloway/archive/2011/09/14/get-t ...

  3. nvarchar与varchar的区别

    原文发布时间为:2009-08-05 -- 来源于本人的百度文章 [由搬家工具导入] 1、通俗一點就是varchar適合輸入英文和數字,nvarchar一般用做中文或其它語言的輸入,這樣到別的語系不會 ...

  4. layui如何使用内部jQuery?

    遇到问题情境: 由于Layui部分内置模块依赖jQuery,所以没有单独引入jQuery,但是在使用$常规写法获取dom元素时,提示未定义 出现问题的原因: 由于Layui部分内置模块依赖jQuery ...

  5. 洛谷 P1056 排座椅【贪心/结构体排序】

    题目描述 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同学上课时会交头接耳.同学 ...

  6. Codeforces 761E Dasha and Puzzle(构造)

    题目链接 Dasha and Puzzle 对于无解的情况:若存在一个点入度大于4,那么直接判断无解. 从根结点出发(假设根结点的深度为0), 深度为0的节点到深度为1的节点的这些边长度为2^30, ...

  7. ssh免秘钥登陆实现

    1.用处 搭建集群或者工作中登陆跳板机经常需要做免秘钥互相登陆彼此服务器. 2. 准备工作   假设A主机10.20.0.1想通过ssh登录到B主机10.20.0.2上.   那么客户端(A主机)需要 ...

  8. VSCode打开大文件插件

    hexdump for vscode 其实没什么插件,上面的是十六进制文件的插件,对于大文件还是建议用专业的ST或者Notepad++这些.

  9. 受检查异常要求try catch,new对象时,就会在堆中创建内存空间,创建的空间包括各个成员变量类型所占用的内存空间

    ,new对象时,就会在堆中创建内存空间,创建的空间包括各个成员变量类型所占用的内存空间

  10. ASIHTTPRequest 问题总结

    1, ASIHttpRequest与30秒超时 今天在项目中发现一个ASIHttpRequest的Bug.这个Bug可能会导致你Http请求延时至少在timeout设置时间结束之后.更可怕的是,为了找 ...