TabBarItem 单个标签项 >=v1.0.0
属性
badge { String|Number }
在图标右上角显示一个红色的气泡。
badgeStyle { View.propTypes.style }
在图标右上角气泡样式。
icon { Image.propTypes.source }
给当前标签指定一个自定义的图标。
renderIcon { function }
() => renderable
自己渲染一个icon,而不用默认图片icon,配置此函数时props.icon不生效。
onPress { function }
当此标签被选中时调用。你应该修改组件的状态来使得selected={true}。
selected { bool }
这个属性决定了子视图是否可见,如果你看到一个空白的页面,很可能是没有选中任何一个标签。
style { View.propTypes.style }
此标签元素样式。
iconStyle { Text.propTypes.style }
标签icon样式。
titleStyle { Text.propTypes.style }
标签标题样式。
title { string }
在图标下面显示的标题文字。
示例
import React, {Component, StyleSheet, View, Text, Image, TabBar} from 'qunar-react-native'
class TabBarExample extends React.Component {
constructor(props){
super(props)
this.state = {
selectedTab: 'wifi',
badgeVisible: true,
}
}
renderIcon(tab) {
const iconfonts = {
wifi: '\uf04b',
find: '\uf067',
money: '\uf238',
}
return <Text style={{fontFamily: 'qunar_react_native', fontSize: 22}}>{iconfonts[tab]}</Text>
}
render() {
const tabs = ['wifi', 'find', 'money']
return (
<TabBar
style={styles.tabBar}
barTintColor="#fff"
>
{tabs.map((tab, i) =>
<TabBar.item
key={i}
title={tab}
badge={tab === 'find' && this.state.badgeVisible ? '1' : undefined}
selected={this.state.selectedTab === tab}
onPress = {() => this.onTabPress(tab)}
renderIcon={() => this.renderIcon(tab)}
titleStyle={{fontSize: 14}}
iconStyle={{fontSize: 22}}
>
{this.renderPageContent(tab)}
</TabBar.item>
)}
</TabBar>
)
}
renderPageContent(pageText: string) {
return (
<View style={styles.pageContainer}>
<View style={[styles.pageContent, {backgroundColor: getRandomColor()}]}>
<Text style={styles.pageContentText}>当前页面: {pageText}</Text>
</View>
</View>
)
function getRandomColor() {
var letters = '3456789ABC'.split('');
var color = '#';
for (var i = 0; i < 6; i++ ) {
color += letters[Math.floor(Math.random() * 10)];
}
return color;
}
}
onTabPress(tab){
if(tab === 'find'){
this.state.badgeVisible = false
}
this.setState({
selectedTab: tab,
badgeVisible: this.state.badgeVisible
})
}
}
const styles = StyleSheet.create({
tabBar: {
flex: 1,
borderTopWidth: 1,
borderColor: '#ccc',
backgroundColor: '#ddd'
},
pageContainer: {
flex: 1,
},
pageContent: {
flex: 1,
alignItems: 'center',
justifyContent: 'center',
},
pageContentText: {
fontSize: 20,
color: '#fff'
},
})