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 'ejs'的解决办法
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如何操作浏览器历史记录_怎样实现无刷新导航
如何快速使用云服务器搭建个人网站?
如何在阿里云高效完成企业建站全流程?

