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',
};