渲染出一个带过渡动画带选项卡
- 支持受控/非受控
- 默认高度44,不支持更改,除非自定义视图
npm install @qnpm/q-tab --save --registry=http://npmrepo.corp.qunar.com
显示代码
import Tab from '@qnpm/q-tab';
const renderBaseTab = (props) => {
const [selected, setSelected] = useState(props.selectedIndex);
return (
<View>
<Tab
{...props}
selectedIndex={selected}
onClickItem={(index, selected) => {
setSelected(index);
}}
/>
</View>
);
};
const itemList = [
{text: '酒店'},
{text: '机票'},
{text: '门票'},
{text: '一日游'}];
return (
<View style={[styles.container]}>
<TextSplit text={"基础"}/>
{
renderBaseTab({
itemList
})
}
<TextSplit text={"宽度相等"}/>
{
renderBaseTab({
itemList,
equantLayout: 'equalWidth'
})
}
<TextSplit text={"间距相等"}/>
{
renderBaseTab({
itemList,
equantLayout: 'equalSpacing'
})
}
<TextSplit text={"自定义样式"}/>
{
renderBaseTab({
itemList,
customStyle: {
wrapperStyle: {
backgroundColor: '#eee'
},
itemStyle: {
color: '#000',
unselectedColor: '#ccc'
}
}
})
}
</View>
)
显示代码
import Tab from '@qnpm/q-tab';
const renderBaseTab = (props) => {
const [selected, setSelected] = useState(props.selectedIndex);
return (
<View>
<Tab
{...props}
selectedIndex={selected}
onClickItem={(index, selected) => {
setSelected(index);
}}
/>
</View>
);
};
const lineRender = () => {
const itemList = [
{text: '酒店'},
{text: '机票'},
{text: '门票'},
{text: '门票2'},
{text: '门票3'},
{text: '门票4'},
{text: '一日游'}];
return (
<View style={styles.container}>
<TextSplit text={"底线"}/>
{
renderBaseTab({
itemList,
showBottomLine: true
})
}
<TextSplit text={"无滑块"}/>
{
renderBaseTab({
itemList,
hideWidget: true
})
}
<TextSplit text={"无遮罩"}/>
{
renderBaseTab({
itemList,
notShowMask: true
})
}
</View>
);
};
显示代码
import AnimatedTab from '@qnpm/q-tab';
const diyRender = () => {
const itemList = [
{text: '酒店'},
{text: '机票'},
{text: '门票'},
{text: '门票2'},
{text: '门票3'},
{text: '门票4'},
{text: '一日游'}];
return (
<View style={styles.container}>
<Tab
itemList={itemList}
selectedIndex={1}
renderItem={(index, selected, item) => {
return (
<View style={{
height: 60,
backgroundColor:
selected
? '#BFEDDD'
: '#fff'
}}>
<Text style={{
fontSize: selected ? 16 : 14,
color: selected
? '#1ba9ba'
: '#666666',
}}>
{item.text}
</Text>
</View>
)
}}
/>
</View>
);
};
属性名 | 类型 | 默认值 | 是否必须 | 说明 |
---|---|---|---|---|
accessibilityPreName |
string |
`` | false |
无障碍标签前缀 |
animationDisabled |
boolean |
false |
false |
是否支持动画 |
customStyle |
TabStyle |
undefined |
false |
部分支持自定义style |
equantLayout |
TabEquantLayoutType |
undefined |
false |
等分布局类型,默认不等分 |
hideWidget |
boolean |
false |
false |
是否展示滑块,默认展示 |
itemList |
TabItem[] |
- |
true |
tab名称列表,必传 |
needScale |
boolean |
false |
false |
是否缩放,默认false |
notShowMask |
boolean |
`` | false |
是否需要展示渐变遮罩 |
onClickItem |
(index: number, selected: boolean, item: TabItem) => void |
undefined |
false |
点击item回调,index为点击索引,selected为点击时item是否选中,注意:调用scrollTo方法后也会回调 |
renderItem |
(index: number, selected: boolean, item: TabItem) => JSX.Element |
undefined |
false |
自定义条目视图 |
selectedIndex |
number |
0 |
true |
受控选中的索引 |
showBottomLine |
boolean |
false |
false |
是否展示底线 |
tabItem
说明
属性名 | 类型 | 默认值 | 是否必须 | 说明 |
---|---|---|---|---|
showSuffixIcon |
boolean |
false |
false |
是否展示tab标题后的小三角图标 |
text |
string |
- |
true |
tab标题,必传 |
customStyle
说明
wrapperStyle
仅可以修改以下样式:flex | width | backgroundColor | padding | marginitemStyle
属性名 | 类型 | 默认值 | 是否必须 | 说明 |
---|---|---|---|---|
color |
string |
gray1 |
false |
选中情况字色 |
unselectedColor |
string |
gary2 |
false |
未选中情况字色 |
widgetColors |
string[] |
['#99F8FF', '#00EEFF'] |
false |
滑块渐变色,仅支持两个色值 |
spacing |
number |
undefined |
false |
item之间的间距,默认30,等分下无效 |
equantLayout
说明
'equalWidth' // 宽度相等
'equalSpacing' // 间距相等