RN封装Tabbar

做个封装的Tabbar为了以后方便运用,同时也希望给初学者提供一点小小的帮助,闲话不多说了,开始封装Tabbar(兼容iOS及Android)。

1.初始化项目导入图片资源,iOS直接导入Images.xcassets即可,Android导入src/mian/res下面,与Android导入资源方法一致。
2.整合项目,创建Class文件夹,将所要编写的js文件全部放在里面方便管理及后期项目维护。

整合后index.ios.js及index.android.js作为程序的入口,Class中创建packageTabbar.js文件, 如下图:

这里写图片描述这里写图片描述
注意:导入外部组件时首字母必须大写不然会报错。
这里写图片描述

ok!!下面就开始一步一步的封装Tabbar:
第一步:进入RN项目目录执行npm install react-native-tab-navigator –save导入库 传送门 学习react-native-tab-navigator具体使用

第二步:进入packagetabbar.js导入外部组件

/**-导入外部组件-**/
import TabNavigator from 'react-native-tab-navigator';

第三部:编写Tabbar代码

/**----导入外部组件-----**/
import TabNavigator from 'react-native-tab-navigator';

var Home = require('../Home/ZylHome');
var Mine = require('../Mine/ZylMine');
var Shop = require('../Shop/ZylShop');
var More = require('../More/ZylMore');

var Main = React.createClass({

    //初始化函数(变量是可以改变,从当状态机的角色)
    getInitialState(){
      return{
          selectedTab:'home' //默认是第一个
      }
    },

    render() {
        return (
            <TabNavigator>
                {/*--首页--*/}
                {this.renderTabBarItem('首页', 'icon_tabbar_homepage', 'icon_tabbar_homepage_selected', 'home', '首页', Home)}
                {/*--商家--*/}
                {this.renderTabBarItem('商家', 'icon_tabbar_merchant_normal', 'icon_tabbar_merchant_selected', 'shop', '商家', Shop)}
                {/*--我的--*/}
                {this.renderTabBarItem('我的', 'icon_tabbar_mine', 'icon_tabbar_mine_selected', 'mine', '我的', Mine)}
                {/*--更多--*/}
                {this.renderTabBarItem('更多', 'icon_tabbar_misc', 'icon_tabbar_misc_selected', 'more', '更多', More)}

            </TabNavigator>
        );
    },

    //每一个TabBarItem
    renderTabBarItem(title, iconName, selectedIconName, selectedTab, componentName, component, badgeText ){
        return(
            <TabNavigator.Item
                title={title}
                renderIcon={() => <Image source={{uri: iconName}} style={styles.iconStyle}/>}
                renderSelectedIcon={() => <Image source={{uri: selectedIconName}} style={styles.iconStyle}/>} //选中图标
                onPress={() =>{this.setState({selectedTab:selectedTab})}}
                selected={this.state.selectedTab === selectedTab}
                selectedTitleStyle={styles.selectedTitleStyle}
                badgeText={badgeText}

            >
                <Navigator
                    initialRoute={{name: componentName,component: component}}
                    configureScene={() => {
                        return Navigator.SceneConfigs.PushFromRight;
                    }}
                    renderScene={(route,navigator) => {
                        let Component = route.component;
                        return <Component {...route.passProps} navigator={navigator}/>
                    }}
                />
            </TabNavigator.Item>
        )
    }


});

const styles = StyleSheet.create({

    iconStyle: {
        width: Platform.OS === 'ios' ? 30 :25,
        height: Platform.OS === 'ios' ? 30 :25
    },
    selectedTitleStyle: {
        color: 'orange'
    }
});

第四部:运行工程,查看结果,针对iOS及Android页面细节做出调整(查看上面代码Platform–判断系统)

效果图如下:
这里写图片描述

GitHub地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 UniApp 中封装底部 Tabbar,你可以按照以下步骤进行操作: 1. 创建一个公共的 Tabbar 组件,可以使用 `uni-tabbar` 组件或者自定义组件实现。 2. 在 App.vue 文件中,使用 `<template>` 标签包裹 `<uni-tab-bar>` 组件,并设置 tabbar 的数据和事件处理方法。 3. 在每个页面的 vue 文件中,使用 `<template>` 标签包裹页面内容,并在相应的位置添加 `<uni-tab-bar-item>` 组件,设置对应的图标、标题和路径。 4. 在每个页面的 vue 文件中,在 `<script>` 标签中引入 tabbar 组件,并在 `data` 属性中定义 tabbar 的数据和事件处理方法。 5. 在组件的事件处理方法中,根据当前选中的 tabbar 项,通过 `uni.switchTab` 方法跳转到对应的页面。 下面是一个简单的示例: App.vue: ```vue <template> <view> <template> <uni-tab-bar :selected="selectedIndex" @click="switchTab"> <uni-tab-bar-item index="0" icon="home" text="首页" page="/pages/home"></uni-tab-bar-item> <uni-tab-bar-item index="1" icon="list" text="列表" page="/pages/list"></uni-tab-bar-item> <uni-tab-bar-item index="2" icon="user" text="我的" page="/pages/mine"></uni-tab-bar-item> </uni-tab-bar> </template> <router-view></router-view> </view> </template> <script> export default { data() { return { selectedIndex: 0 } }, methods: { switchTab(index) { this.selectedIndex = index uni.switchTab({ url: this.$children.$children[index].page }) } } } </script> ``` Home.vue: ```vue <template> <view> <!-- 页面内容 --> </view> </template> <script> import UniTabBarItem from '@/components/UniTabBarItem.vue' export default { components: { UniTabBarItem }, data() { return { tabbarData: [ { index: 0, icon: 'home', text: '首页', page: '/pages/home' }, { index: 1, icon: 'list', text: '列表', page: '/pages/list' }, { index: 2, icon: 'user', text: '我的', page: '/pages/mine' } ] } }, methods: { switchTab(index) { uni.switchTab({ url: this.tabbarData[index].page }) } } } </script> ``` List.vue 和 Mine.vue 的代码类似,只需要修改对应的页面内容和 tabbarData 数据。 这样,你就可以在页面中使用底部 Tabbar,并实现页面间的切换了。希望能对你有所帮助!如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值