zoukankan      html  css  js  c++  java
  • 底部TabsFooter

    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样式我们可以通过自定义设置。

  • 相关阅读:
    Nginx编译安装及平滑升级
    alertmanager 分组,抑制, 静默
    alertmanager 邮件告警&自定义告警模板
    alertmanager 高可用
    程序运行报错UnicodeDecodeError: 'utf8' codec can't decode byte 0x89 in position 0: invalid start byte
    Postman 导入curl 、导出成curl、导出成对应语言代码
    Python 字符串操作(截取/替换/查找/分割)
    In testLogin: indirect fixture *** doesn‘t exist
    postman 传参传递二进制流文件
    开发经验01
  • 原文地址:https://www.cnblogs.com/maoyazhi/p/6474988.html
Copyright © 2011-2022 走看看