react-native-tab-navigator组件的基本使用示例代码
程序员文章站
2022-05-14 19:03:26
要做的效果很简单,如下图所示:
使用基本教程
1.引入组件
import tabnavigator from 'react-native-tab-navi...
要做的效果很简单,如下图所示:
使用基本教程
1.引入组件
import tabnavigator from 'react-native-tab-navigator';
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 |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: 详解vue-router 路由元信息