--- localeCode: en-US order: 39 category: Navigation title: Tabs subTitle: Tabs icon: doc-tabs brief: When the content needs to be grouped and displayed in different modules or pages, you could use Tabs to switch between different groups or pages --- ## Demos ### How to import ```jsx import { Tabs, TabPane } from '@douyinfe/semi-ui'; ``` ### Basic Usage Tbs supports three types of styles: `line`, `button`, and `card`. By default, the first tab is selected. You could use either `tabList` to pass in an array of tabs objects, or use `` to create each tab. Mixed usage of two ways is not recommended and data in `tabList` will be rendered with priority. > When you use `tabList`, only the current active tab will be rendered. For ``, all tabs will be rendered in DOM tree by default. You could set `keepDOM={false}` to only render current panel. No animation will be displayed in this case. ```jsx live=true import React from 'react'; import { Tabs, TabPane } from '@douyinfe/semi-ui'; class App extends React.Component { render() { return (

Document

Semi Design is a design system developed and maintained by IES Front-end Team and UED Team

Semi Design create a consistent, good-looking, easy-to-use, and efficient user experience with a user-centric, content-first, and human-friendly design system.

  • Content-first

  • Customized theming

  • Internationalized

  • Humanism

Quick Start

If it is a new project, it is recommended that you use Eden to initialize the project and initialize the project type to select the React direction.

                            
                                yarn add @douyinfe/semi-ui
                            
                        

Help

Q: Who should I look for if there are new component requirements, or existing component does not meet my needs?

Give feedbacks in the upper right corner, submit an Issue, describe your needs as well as the business scenario. We'll handle these issues with priorities.

Q: Have questions when using components?

Welcome to ask anything in our Lark customer service group.

); } } ``` ```jsx live=true import React from 'react'; import { Tabs, TabPane } from '@douyinfe/semi-ui'; class App extends React.Component { render() { return ( Document Quick Start Help ); } } ``` ```jsx live=true import React from 'react'; import { Tabs } from '@douyinfe/semi-ui'; class TabDemo extends React.Component { constructor() { super(); this.state = { key: '1' }; this.onTabClick = this.onTabClick.bind(this); } onTabClick(key, type) { this.setState({ [type]: key }); } render() { const contentList = [
Document
,
Quick Start
,
Help
]; const tabList = [ { tab: 'Document', itemKey: '1' }, { tab: 'Quick Start', itemKey: '2' }, { tab: 'Help', itemKey: '3' }, ]; return ( { this.onTabClick(key, 'key'); }} > {contentList[this.state.key - 1]} ); } } ``` ### With Icon ```jsx live=true import React from 'react'; import { Tabs, TabPane } from '@douyinfe/semi-ui'; import { IconFile, IconGlobe, IconHelpCircle } from '@douyinfe/semi-icons'; class App extends React.Component { render() { return ( Document } itemKey="1" > Document Quick Start } itemKey="2" > Quick Start Help } itemKey="3" > Help ); } } ``` ### Vertical mode Support two positions: `tabPosition='left|top'` ```jsx live=true import React from 'react'; import { Tabs, TabPane, Radio, RadioGroup } from '@douyinfe/semi-ui'; import { IconFile, IconGlobe, IconHelpCircle } from '@douyinfe/semi-icons'; class App extends React.Component { constructor() { super(); this.state = { type: 'line', }; } onSelect(e) { this.setState({ type: e.target.value, }); } render() { return ( <> this.onSelect(e)} value={this.state.type} style={{ display: 'flex', justifyContent: 'center', }} > Line Card Button

Document } itemKey="1" >
Document
Quick Start } itemKey="2" >
Quick Start
Help } itemKey="3" >
Help
); } } ``` ### Scrollable Tabs **v>= 1.1.0** You could use `collapsible` for a scrollable tabs with dropdown menu. Horizontal mode only. ```jsx live=true import React from 'react'; import { Tabs, TabPane } from '@douyinfe/semi-ui'; class App extends React.Component { render() { return ( {[0, 1, 2, 3, 4, 5, 6, 7, 8, 9].map(i => ( Content of card tab {i} ))} ); } } ``` ### Disable Disable one tab. ```jsx live=true import React from 'react'; import { Tabs, TabPane } from '@douyinfe/semi-ui'; class App extends React.Component { render() { return ( Document Quick Start Help ); } } ``` ### Extra Content Use `tabBarExtraContent` to add extra content on the right side of tabBar. ```jsx live=true import React from 'react'; import { Tabs, TabPane, Button } from '@douyinfe/semi-ui'; class App extends React.Component { render() { return ( { alert('you have clicked me!'); }} > Extra Action } > Document Quick Start Help ); } } ``` ### Custom Render Use `renderTabBar` to customize tabBar render behavior. ```jsx live=true import React from 'react'; import { Tabs, TabPane } from '@douyinfe/semi-ui'; class App extends React.Component { render() { return ( { return (
This is a custom rendered tabBar. Current activeKey is: {tabBarProps.activeKey}
); }} > Document Quick Start Help
); } } ``` ### Dynamic Update You can add events to update tabBar dynamicly. ```jsx live=true import React from 'react'; import { Tabs, TabPane, ButtonGroup, Button } from '@douyinfe/semi-ui'; class App extends React.Component { constructor(props) { super(props); this.newTabIndex = 0; const panes = [ { title: 'Tab 1', content: 'Content of Tab Pane 1', itemKey: '1' }, { title: 'Tab 2', content: 'Content of Tab Pane 2', itemKey: '2' }, ]; this.state = { panes, activeKey: panes[0].itemKey, }; } add() { const { panes } = this.state; const index = this.newTabIndex++; panes.push({ title: `New Tab ${index}`, content: 'New Tab Pane', itemKey: `newTab${index}` }); this.setState({ panes, activeKey: `newTab${index}` }); } remove() { const { panes } = this.state; if (panes.length > 1) { panes.pop(); this.setState({ panes, activeKey: panes[panes.length - 1].itemKey }); } } handleChange(activeKey) { this.setState({ activeKey }); } render() { const { panes, activeKey } = this.state; return ( } > {panes.map(pane => ( {pane.content} ))} ); } } ``` ## API Reference ### Tab Property | Description | Type | Default Value | --- | --- | --- | --- | activeKey | The itemKey value of the currently active tab page | string | None | className | class name | string | None | collapsible | collapsed Tabs, **>=1.1.0** | boolean | false | contentStyle | The outer style object of the content area | CSSProperties | None | defaultActiveKey | Initialize the key value of the selected tab page | string | '1' | keepDOM | Whether to render the DOM structure of the hidden panel when using TabPane writing, **>=1.0.0** | boolean | true | lazyRender | Lazy rendering, only when the panel is activated will it be rendered in the DOM tree, **>=1.0.0** | boolean | false | renderTabBar | Used for secondary packaging tab bar | (tabBarProps: object, defaultTabBar: React.ComponentType) => ReactNode | None | size | Size, providing three types of `large`, `medium`, and `small`, **>=1.11.0, currently only supports linear Tabs** | string | `large` | style | style object | CSSProperties | None | tabBarExtraContent | Used to extend the content of the tab bar | ReactNode | None | tabList | An array of tab page objects that supports itemKey (corresponding to activeKey, tab (tab page text) and icon (tab page icon) | TabPane[] | None | tabPaneMotion | Whether to use animation to switch tabs | boolean | true | tabPosition | The position of the tab, support `top` (horizontal), `left` (vertical), **>=1.0.0** | boolean | `top` | type | The style of the label bar, optional `line`, `card`, `button` | string | `line` | onChange | Callback function when switching tab pages | function(activeKey: string) | None | onTabClick | Click event | function(key: string, e: Event) | None | ### TabPane Property | Description | Type | Default Value | --------- | ---------------- | ------------------ | ---- - | className | class name | string | None | disabled | Whether the tab bar is disabled | boolean | None | icon | Tab bar icon | ReactNode | None | itemKey | corresponding to `activeKey` | string | None | style | style object | CSSProperties | None | tab | Tab page bar display text | ReactNode | None | ## Design Token