import React, { useState } from 'react'; import Tabs from '../index'; import Button from '@douyinfe/semi-ui/button/index'; import Typography from '@douyinfe/semi-ui/typography/index'; import Switch from '@douyinfe/semi-ui/switch/index'; import { Radio, RadioGroup } from '@douyinfe/semi-ui'; import Icon from '../../icons'; import { IconFile, IconGlobe, IconHelpCircle } from '@douyinfe/semi-icons'; const TabPane = Tabs.TabPane; const { Title } = Typography; export default { title: 'Tabs' } const style = { width: '600px', margin: '20px', }; const onChange = activeKey => { console.log('onChange: activeKey =>', activeKey); }; const onTabClick = (activeKey, event) => { console.log('onTabClick: onTabClick =>', activeKey); }; const operations = ( ); class App extends React.Component { render() { return (

文档

Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统。设计系统包含设计语言以及一整套可复用的前端组件,帮助设计师与开发者更容易地打造高质量的、用户体验一致的、符合设计规范的 Web 应用。

区别于其他的设计系统而言,Semi Design 以用户中心、内容优先、设计人性化为设计理念,具有以下优势:

  • Semi Design 以内容优先进行设计。

  • 更容易地自定义主题。

  • 适用国际化场景。

  • 效率场景加入人性化关怀。

文档

Semi Design 是由互娱社区前端团队与 UED 团队共同设计开发并维护的设计系统。设计系统包含设计语言以及一整套可复用的前端组件,帮助设计师与开发者更容易地打造高质量的、用户体验一致的、符合设计规范的 Web 应用。

区别于其他的设计系统而言,Semi Design 以用户中心、内容优先、设计人性化为设计理念,具有以下优势:

  • Semi Design 以内容优先进行设计。

  • 更容易地自定义主题。

  • 适用国际化场景。

  • 效率场景加入人性化关怀。

快速起步

如果是全新的项目,建议你使用 eden 初始化项目,初始化项目类型选择 react

              
            

帮助

Q:有新组件需求、或者现有组件feature不能满足业务需求?

右上角问题反馈,提交issue,label选择Feature Request / New Component Request 我们会高优处理这些需求。

Q:对组件的使用有疑惑?

欢迎进我们的客服lark群进行咨询提问。

); } } export const Level1NoIcon = () => (
); Level1NoIcon.story = { name: 'Level 1-无图标', }; export const DefaultActiveKeyDemo = () => ( 文档 快速起步 帮助 关于 资源工具 ); DefaultActiveKeyDemo.story = { name: '指定defaultActiveKey', }; export const Level1WithIcon = () => ( 文档 } itemKey="1" > 文档 快速起步 } itemKey="2" > 快速起步 帮助 } itemKey="3" > 帮助 ); Level1WithIcon.story = { name: 'Level 1-有图标', }; export const Level1WithTabBarExtraContent = () => ( 文档 快速起步 帮助 关于 资源工具 ); Level1WithTabBarExtraContent.story = { name: 'Level 1-导航内容扩展', }; export const RenderTabBar = () => ( { return (
这是二次封装的Tab Bar,当前ActiveKey:{tabBarProps.activeKey}
); }} > 文档 快速起步 帮助 关于 资源工具
); RenderTabBar.story = { name: 'Level 1-导航二次封装', }; export const DisabledTab = () => ( 文档 快速起步 帮助 关于 资源工具 ); DisabledTab.story = { name: 'Level 1-不可点击Tab', }; export const Level2Card = () => ( 文档 快速起步 帮助 关于 资源工具 ); Level2Card.story = { name: 'Level 2-卡片Tab', }; export const Level3ButtonTab = () => ( 文档 快速起步 帮助 关于 资源工具 ); Level3ButtonTab.story = { name: 'Level 3-按钮Tab', }; class TabDemo extends React.Component { constructor() { super(); this.state = { itemKey: '1', }; this.onTabClick = this.onTabClick.bind(this); } onTabClick(itemKey, type) { this.setState({ [type]: itemKey, }); } render() { const contentList = [
文档
,
快速起步
,
帮助
,
关于
,
资源工具
, ]; const tabList = [ { tab: '文档', itemKey: '1', }, { tab: '快速起步', itemKey: '2', }, { tab: '帮助', itemKey: '3', }, { tab: '关于', itemKey: '4', }, { tab: '资源工具', itemKey: '5', }, ]; return ( { this.onTabClick(itemKey, 'itemKey'); }} > {contentList[this.state.itemKey]} test test2 ); } } export const TabList = () => ; TabList.story = { name: 'tabList', }; class TabDemo2 extends React.Component { constructor() { super(); this.state = { key: '1', }; this.onTabClick = this.onTabClick.bind(this); } onTabClick(val) { console.log('key', val); this.setState({ key: val, }); } render() { return ( this.onTabClick(val)}> 文档 快速起步 帮助 关于 资源工具 ); } } export const ActiveKey = () => ; ActiveKey.story = { name: 'activeKey', }; class TabDemo3 extends React.Component { constructor() { super(); this.state = { key: '1', type: 'here', }; } onTabClick(val) { console.log('key', val); this.setState({ key: val, type: 'search', }); } render() { let type = this.state.type; return ( this.onTabClick(val)}> 文档 快速起步 {type === 'search' && ( 搜索 )} ); } } export const Dynamic = () => ; class TabDemo4 extends React.Component { constructor() { super(); this.state = { loading: true, }; } updateTab = () => { this.setState({ loading: !this.state.loading, }); this.tab = Math.random(); }; render() { let type = this.state.type; return (
文档 快速起步 {type === 'search' && ( 搜索 )}
); } } export const Update = () => ; export const RenderCurrentPane = () => ( 文档 快速起步 帮助 关于 资源工具 ); RenderCurrentPane.story = { name: '只渲染当前pane' } export const LazyRender = () => ( 文档 快速起步 帮助 关于 资源工具 ); LazyRender.story = { name: '懒渲染' } export const VerticalTabs = () => ( 文档 快速起步 帮助 关于 资源工具 ); VerticalTabs.story = { name: '垂直的tabs' } export const HorizontalTabs = () => ( 文档 快速起步 帮助 关于 资源工具 ); HorizontalTabs.story = { name: '垂直的tabs - 卡片', }; export const VerticalTabsButton = () => ( 文档 快速起步 帮助 关于 资源工具 ); VerticalTabsButton.story = { name: '垂直的tabs - 按钮', }; export const CollapseTabs = () => (
{[...Array(30).keys()].map(i => ( Content of card tab {i} ))}

{[...Array(30).keys()].map(i => ( Content of button tab {i} ))}

{[...Array(30).keys()].map(i => ( Content of line tab {i} ))}
); CollapseTabs.story = { name: '折叠的tabs' } const TabSizeDemo = () => { const typeList = ['line']; const [size, setSize] = useState('large'); const [vertical, setVertical] = useState(false); return (
setSize(e.target.value)} value={size}> small medium large
{vertical ? '垂直' : '水平'}
{typeList.map((type, index) => { return ( {[...Array(3).keys()].map(i => ( Content of {type} tab {i} ))} ); })}

); }; export const TabSize = () => ; TabSize.story = { name: 'tab size', }; class TabListChangeDemo extends React.Component { constructor() { super(); this.state = { itemKey: '1', tabList:[ { tab: '文档', itemKey: '1', }, { tab: '快速起步', itemKey: '2', }, { tab: '帮助', itemKey: '3', }, { tab: '关于', itemKey: '4', }, { tab: '资源工具', itemKey: '5', }, ] }; this.onTabClick = this.onTabClick.bind(this); } onTabClick(itemKey, type) { this.setState({ [type]: itemKey, tabList: [{ tab: '文档', itemKey: '1', }] }); } render() { const contentList = [
文档
,
快速起步
,
帮助
,
关于
,
资源工具
, ]; return ( { this.onTabClick(itemKey, 'itemKey'); }} > {contentList[this.state.itemKey]} test test2 ); } } export const TabListChange = () => ; TabListChange.story = { name: 'tablist change', }; class TabClosableDemo extends React.Component { constructor(props){ super(props); this.state = { tabList: [ {tab: '文档', itemKey:'1', text:'文档', closable:true}, {tab: '快速起步', itemKey:'2', text:'快速起步', closable:true}, {tab: '帮助', itemKey:'3', text:'帮助'}, ] } } close(key){ const newTabList = [...this.state.tabList]; const closeIndex = newTabList.findIndex(t=>t.itemKey===key); newTabList.splice(closeIndex, 1); this.setState({tabList:newTabList}); } render() { return ( { this.state.tabList.map(t=>{t.text}) } ); } } export const TabClosable = () => ; TabClosable.story = { name: 'tab closable', };