# Tabbar

- category: UI
- chinese: Tab切换
- type: UI组件

---


## 何时使用

tab 切换，常用于业务的整个布局框架。

## API


### Tabbar

属性 | 说明 | 类型 | 默认值
-----|-----|-----|------
itemStyle|自定义tabbar-item容器的样式，会覆盖默认样式,通过该字段可自定义设置tab导航栏的宽高及布局方式|object|false
style|自定义tabbar容器的样式，会覆盖默认样式|object|false
navTop | 是否顶部导航，默认为底部的tabbar，可调节到顶部  | boolean | false
navStyle | 自定义tab标题栏的样式需要传入{active: {style...}, inactive: {style...}}  active对应选中样式, inactive 为取消选中的样式| object | false
navScrollable | 导航是否可滚动，如果可滚动，则不限制tab宽度，横向滚动。如果不可滚动，则每个子元素flex =1 均分父容器宽度 | boolean | false
iconBar | 是否带icon|boolean |false
activeKey | （必须）用于初次打开及切换到指定的tab，接收tab的key| string |false
asFramework|当做框架来使用，启动该项，需要业务方手动控制shouldComponentUpdate事件进行优化控制，否则会认为以简单容器形式使用，对props变更进行过滤控制|boolean|false
onChange（embed模式无效）| 切换tab时抛出prevTab和nextTab，手动更改props时不触发| funtion |false
customChange（embed模式无效）| 定义内置切换tab的注入方法名称，默认为changeTo，使用方法，在tabContent中直接调用this.changeTo('tab 的key')|string|false
customFocus（embed模式无效）|定义获得交点的hook，该方法存在tabbar在切换时会执行此方法，默认为onFoucs，在tabContent中直接定义changeTo即可，切换tab时切出为false，切入为true|string|false


**注意：**
- **更改state,props不生效** 默认`asFramework`配置为false，将会对非tabbar状态变更进行过滤，达到提高性能的效果。如果使用者需要通过状态变更来控制组件，请设置为true
- **embed模式** 当Tabbar.item设置 src 属性时，会启用embed模式，该模式 h5 表现为使用 iframe 加载页面，native 表现为使用 embed 加载jsBundle来加载模块， 但并非所有 app 都支持 embed 模式，因此使用前请充分自测！



### Tabbar.Item

|属性 | 说明 | 类型 | 默认值|
|-----|-----|-----|------|
|render | 自定义渲染函数，item会传入当前是否属于活动状态 status，当前 tabkey 为参数  | function | 无|
|tabKey|（必须）定义该tabbar的key|string|无|
|preventDefaultEvent|定义是否要禁止掉默认事件|boolean|无|
|badge | 透出的消息数，以小角标方式显示在右上角  | string | 无|
|num | 透出的数字，跟在tab的title后面，展示方式 title(num)  | string | 无|
|onPress | 点击后事件handler | function | 无|
|title | 透出的文案 | string | 无|
|icon|如果tabbar 设置 iconbar=true，则此处设置有效，{src: 'xxx',selected:'xxx',size:'small/medium/large',style:{}}|object|无|
|src(启用embed模式)| 定义要加载的 jsbundle url |string|无|


**1.0.0版本后的tabbar移除了可滚动效果** 如需滑动效果可以参考 `nuke-biz-ep-tabbar`
