Storybook for React 是一个用于开发、测试和展示 React 组件的开源工具。它提供了一个独立的开发环境,允许开发者以隔离的方式构建和查看 UI 组件,而无需运行整个应用程序。
Storybook 是一个 UI 组件开发工具,最初为 React 开发,现在也支持其他框架(如 Vue、Angular、Svelte 等)。在 React 生态中,Storybook 允许开发者以“故事”(Stories)的形式展示组件的不同状态和变体。每个“故事”是一个组件的特定用例,展示其外观和行为。
Storybook 的核心功能包括:
简单来说,Storybook 是一个“组件驱动开发”(Component-Driven Development)的利器,广泛用于构建设计系统、组件库或任何需要高质量 UI 组件的项目。
以下是使用 Storybook for React 的基本步骤:
确保你有一个 React 项目:
如果没有,可以用以下命令创建一个:
npx create-react-app my-app
cd my-app
安装 Storybook:
在项目根目录运行以下命令,自动初始化 Storybook:
npx storybook@latest init
这会:
.storybook
文件夹(包含配置文件)。src/stories
文件夹中生成示例故事。启动 Storybook:
运行以下命令启动 Storybook 的开发服务器:
npm run storybook
Storybook 会在浏览器中打开(默认地址为 http://localhost:6006
),展示示例组件。
Storybook 使用“故事”(Stories)来描述组件的不同状态。每个故事是一个 JavaScript/TS 文件,导出组件的特定用例。
例如,假设你有一个 Button
组件:
// src/components/Button.jsx
import React from 'react';
const Button = ({ label, primary, onClick }) => {
return (
<button
style={{
backgroundColor: primary ? 'blue' : 'gray',
color: 'white',
padding: '10px 20px',
border: 'none',
borderRadius: '4px',
}}
onClick={onClick}
>
{label}
</button>
);
};
export default Button;
为这个组件创建一个 Story 文件:
// src/stories/Button.stories.jsx
import Button from '../components/Button';
export default {
title: 'Components/Button', // Storybook 侧边栏中的层级结构
component: Button, // 指定组件
argTypes: {
primary: { control: 'boolean' }, // 控制面板中可以交互的 props
label: { control: 'text' },
onClick: { action: 'clicked' }, // 模拟点击事件
},
};
const Template = (args) => <Button {...args} />;
// 默认故事
export const Default = Template.bind({});
Default.args = {
label: 'Default Button',
primary: false,
};
// 主按钮故事
export const Primary = Template.bind({});
Primary.args = {
label: 'Primary Button',
primary: true,
};
title
:定义故事在 Storybook 界面中的位置。component
:指定要展示的组件。argTypes
:定义 props 的交互方式(如布尔值、文本等)。Template
:一个可复用的组件渲染模板。Default
、Primary
)展示组件的不同状态。保存文件后,Storybook 会自动更新。你可以在浏览器中:
Default
、Primary
)。label
或切换 primary
)。onClick
日志)。添加插件:安装常用插件,如 @storybook/addon-a11y
(无障碍测试)或 @storybook/addon-docs
(自动文档)。
npm install @storybook/addon-a11y
在 .storybook/main.js
中注册插件:
module.exports = {
addons: ['@storybook/addon-a11y'],
};
自定义配置:修改 .storybook/preview.js
或 .storybook/main.js
来调整主题、布局或全局设置。
@storybook/testing-library
编写交互测试或视觉回归测试。将 Storybook 部署到静态网站(如 Vercel、Netlify)或内部服务器,供团队查看:
npm run build-storybook
这会生成一个静态的 storybook-static
文件夹,可以直接部署。
Storybook 的使用有以下几个核心优势:
Storybook for React 是一个强大的工具,用于以组件为中心的方式开发、测试和展示 UI。它通过隔离环境、交互式预览和文档化功能,提升了开发效率和团队协作能力。使用时,只需安装、编写故事、扩展功能即可,适合从小型项目到企业级设计系统的各种场景。