react-native-tab-navigator组件的基本使用示例代码

发布时间 - 2026-01-11 03:09:17    点击率:

要做的效果很简单,如下图所示:

使用基本教程

1.引入组件

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

Github上的地址

2.render方法中返回:

render() { 
  return ( 
   <View style={styles.container} > 
    <TabNavigator> 
     <TabNavigator.Item 
      selected={this.state.selectedTab === '电影'} 
      title="电影" 
      titleStyle={styles.tabText} 
      selectedTitleStyle={styles.selectedTabText} 
      renderIcon={() => <Image style={styles.icon} source={require("../images/movie_gray.png")} />} 
      renderSelectedIcon={() => <Image style={styles.icon} source={require("../images/movie_red.png")} />} 
      onPress={() => this.setState({ selectedTab: '电影' })}> 
      <MoviePage/> // 这里放入页面组件
     </TabNavigator.Item> 
     <TabNavigator.Item 
      selected={this.state.selectedTab === '音乐'} 
      title="音乐" 
      titleStyle={styles.tabText} 
      selectedTitleStyle={styles.selectedTabText} 
      renderIcon={() => <Image style={styles.icon} source={require("../images/music_gray.png")} />} 
      renderSelectedIcon={() => <Image style={styles.icon} source={require("../images/music_red.png")} />} 
      onPress={() => this.setState({ selectedTab: '音乐' })}> 
      <MusicPage /> 
     </TabNavigator.Item> 
     <TabNavigator.Item 
      selected={this.state.selectedTab === '图书'} 
      title="图书" 
      titleStyle={styles.tabText} 
      selectedTitleStyle={styles.selectedTabText} 
      renderIcon={() => <Image style={styles.icon} source={require("../images/book_gray.png")} />} 
      renderSelectedIcon={() => <Image style={styles.icon} source={require("../images/book_red.png")} />} 
      onPress={() => this.setState({ selectedTab: '图书' })}> 
      <BookPage /> 
     </TabNavigator.Item> 
     <TabNavigator.Item 
      selected={this.state.selectedTab === '我的'} 
      title="我的" 
      titleStyle={styles.tabText} 
      selectedTitleStyle={styles.selectedTabText} 
      renderIcon={() => <Image style={styles.icon} source={require("../images/my_gray.png")} />} 
      renderSelectedIcon={() => <Image style={styles.icon} source={require("../images/my_red.png")} />} 
      onPress={() => this.setState({ selectedTab: '我的' })}> 
      <MyPage /> 
     </TabNavigator.Item> 
    </TabNavigator> 
   </View> 
  ); 
 }

引入页面组件:

import MoviePage from './pages/MoviePage';
import MusicPage from './pages/MusicPage';
import BookPage from './pages/BookPage';
import MyPage from './pages/MyPage';

设置state状态机:

constructor(props){
 super(props);
 this.state = {
  selectedTab:'电影'
 }
}

引入基本样式:

const styles = StyleSheet.create({
 container:{
 flex:1,
 backgroundColor:'#fff'
 },
 tabText:{
 color:'#000000',
 fontSize:10
 },
 selectedTabText:{
 color:'#D81E06'
 },
 icon:{
 width:20,
 height:20
 }
})

这个时候效果已经出来了,我们继续抽象组件:

将每一个栏目抽出来放到一个统一的方法中:

_renderTabarItems(selectedTab,icon,selectedIcon,Component){
 return (
  <TabNavigator.Item
   selected={this.state.selectedTab === selectedTab} 
   title={selectedTab} 
   titleStyle={styles.tabText} 
   selectedTitleStyle={styles.selectedTabText} 
   renderIcon={() => <Image style={styles.icon} source={icon} />} 
   renderSelectedIcon={() => <Image style={styles.icon} source={selectedIcon} />} 
   onPress={() => this.setState({ selectedTab: selectedTab })}
  >
   <Component />
  </TabNavigator.Item>
 )

 }

此时,render方法中就直接引用四个方法即可:

render() {
 return (
  <View style={styles.container}>
  <TabNavigator>
   {this._renderTabarItems('电影',require('../img/movie_gray.png'),require('../img/movie_red.png'),MoviePage)}
   {this._renderTabarItems('音乐',require('../img/music_gray.png'),require('../img/music_red.png'),MusicPage)}
   {this._renderTabarItems('图书',require('../img/book_gray.png'),require('../img/book_red.png'),BookPage)}
   {this._renderTabarItems('我的',require('../img/my_gray.png'),require('../img/my_red.png'),MyPage)}
  </TabNavigator>
  </View>
 );
 }

至此,已经初步完成。

组件的属性集合:

Props

TabNavigator props

prop default type description
sceneStyle inherited object (style) 场景样式,即Tab页容器的样式,可按View的style设置
tabBarStyle inherited object (style) TabBar的样式,基本也可按照普通的style写法进行设置
tabBarShadowStyle inherited object (style) TabBar阴影的样式,不过对于扁平化的设计,这个属性应该用处不大
hidesTabTouch false boolean bool类型,即是否隐藏Tab按钮的按下效果

TabNavigator.Item props

prop default type description
renderIcon none function 即图标,但为function类型,所以这里需要用到Arrow Function
renderSelectedIcon none function 选中状态的图标,非必填,也是function类型
badgeText none string or number 即Tab右上角的提示文字,可为String或Number,类似QQ中Tab右上角的消息提示,非必填
renderBadge none function 提示角标渲染方式,function类型,类似render的使用,非必填
title none string 标题,String类型,非必填
titleStyle inherited style 标题样式,style类型,非必填
selectedTitleStyle none style 选中标题样式,style类型,非必填
tabStyle inherited style styling for tab
selected none boolean bool型,是否选中状态,可使用setState进行控制,默认false
onPress none function 即点击事件的回调函数,这里需要控制的是state
allowFontScaling false boolean bool型,是否允许字体缩放,默认false

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# react  # tabnavigator  # reactnativenavigator  # 微信小程序间使用navigator跳转传值问题实例分析  # DataGridView使用BindingNavigator实现简单分页功能  # React Native中NavigatorIOS组件的简单使用详解  # React Native中Navigator的使用方法示例  # react-native组件中NavigatorIOS和ListView结合使用的方法  # React-Native中禁用Navigator手势返回的示例代码  # ReactNative页面跳转Navigator实现的示例代码  # JavaScript navigator.userAgent获取浏览器信息案例讲解  # 必填  # 的是  # 也可  # 要做  # 很简单  # 这个时候  # 所示  # 按下  # 可为  # 可按  # 中就  # 回调  # 大家多多  # 如下图  # 但为  # 扁平化  # 出来了  # icon  # Image  # state 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  新三国志曹操传主线渭水交兵攻略  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  如何快速搭建FTP站点实现文件共享?  详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南  php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】  Android Socket接口实现即时通讯实例代码  WordPress 子目录安装中正确处理脚本路径的完整指南  如何快速搭建自助建站会员专属系统?  Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法  香港服务器如何优化才能显著提升网站加载速度?  Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程  Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】  PythonWeb开发入门教程_Flask快速构建Web应用  如何在Tomcat中配置并部署网站项目?  Laravel如何编写单元测试和功能测试?(PHPUnit示例)  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  Laravel中的withCount方法怎么高效统计关联模型数量  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复  JS中对数组元素进行增删改移的方法总结  音乐网站服务器如何优化API响应速度?  如何在服务器上三步完成建站并提升流量?  Laravel如何使用Collections进行数据处理?(实用方法示例)  高防服务器租用如何选择配置与防御等级?  Laravel定时任务怎么设置_Laravel Crontab调度器配置  Java类加载基本过程详细介绍  node.js报错:Cannot find module &#39;ejs&#39;的解决办法  Laravel怎么上传文件_Laravel图片上传及存储配置  高防服务器:AI智能防御DDoS攻击与数据安全保障  黑客如何利用漏洞与弱口令入侵网站服务器?  如何为不同团队 ID 动态生成多个非值班状态按钮  如何基于云服务器快速搭建个人网站?  高端网站建设与定制开发一站式解决方案 中企动力  ChatGPT 4.0官网入口地址 ChatGPT在线体验官网  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  phpredis提高消息队列的实时性方法(推荐)  Laravel的.env文件有什么用_Laravel环境变量配置与管理详解  Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】  JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)  如何确认建站备案号应放置的具体位置?  javascript基于原型链的继承及call和apply函数用法分析  Linux系统命令中tree命令详解  iOS发送验证码倒计时应用  Python结构化数据采集_字段抽取解析【教程】  javascript如何操作浏览器历史记录_怎样实现无刷新导航  如何快速使用云服务器搭建个人网站?  如何在阿里云高效完成企业建站全流程?