编写 Story
从项目中选择一个简单的组件,比如一个 Button,然后编写一个 .stories.ts 或一个 .stories.mdx 文件来配合它。
它可能看起来像这样:
|
|
编写文档(可选)
<!-- YourComponent.stories.mdx -->
import { Meta, Story } from '@storybook/addon-docs';
import { YourComponent } from './YourComponent';
<!--👇 标题 prop 决定了故事在故事列表中的位置 -->
<Meta title="YourComponent" component={YourComponent} />
<!--👇 args 如何映射到渲染的 template -->
export const Template = (args) => <YourComponent {...args} />;
<!-- 👇 此处的参数取决于组件 -->
<Story
name="FirstStory"
args={{}}>
{Template.bind({})}
</Story>
转到 Storybook 以查看呈现的组件。 如果现在看起来有点不寻常也没关系。
根据技术堆栈,可能还需要进一步配置 Storybook 环境。
为堆栈配置 Storybook
Storybook 带有一个宽松的默认配置。
它尝试自定义自己以适合您的设置。 但这并非万无一失。
在单独呈现组件之前,项目可能有其他要求。 这需要进一步定制配置。
您可能需要三大类配置。
1. 像 webpack 和 Babel 一样构建配置
如果在运行 yarn storybook 命令时在 CLI 上看到错误,则可能需要更改 Storybook 的构建配置。 以下是一些可以尝试的事情:
-
Presets 将各种技术的通用配置捆绑到 Storybook 中。
特别是 Create React App、SCSS 和 Ant Design 的预设。 -
为 Storybook 指定自定义 Babel 配置。 如果可以,Storybook 会自动尝试使用您项目的配置。
-
调整 Storybook 使用的 webpack 配置。 如果需要,请尝试在自己的配置中打补丁。
2. 运行时配置
如果 Storybook 已构建,但浏览器连接到它时立即看到错误,在这种情况下,很可能输入文件之一未正确编译/转译以供浏览器解释。
Storybook 支持现代浏览器和 IE11,但可能需要检查 Babel 和 webpack 设置(见上文)以确保组件代码正常工作。
3. Component context
如果某个特定的故事在渲染时出现问题,通常意味着组件希望该组件可以使用特定的环境。
一个常见的前端模式是让组件假设它们在特定的“上下文”中渲染,父组件在渲染层次结构中更高(例如,主题提供者)。
使用 Decorators 装饰器 将每个故事“包装”在必要的上下文提供者中。
.storybook/preview.js
文件允许自定义组件在 Canvas(预览 iframe)中的呈现方式。
在下面的示例中,了解如何使用 Styled Components ThemeProvider 主题提供程序组件来包装 Storybook 中呈现的每个组件。
React:
|
|
React(STORY-FUNCTION):
|
|
渲染组件样式
Storybook 对如何生成或加载 CSS 并不抱有偏见。
它呈现您提供的任何 DOM 元素。 但有时,开箱即用的东西不会“看起来正确”。
可能需要为 Storybook 的渲染环境配置 CSS 工具。 以下是一些可以提供帮助的提示:
- CSS-in-JS like styled-components and Emotion
如果正在使用 CSS-in-JS,那么样式很可能是有效的,因为它们是在 JavaScript 中生成并与每个组件一起提供的。 主题用户可能需要在 .storybook/preview.js 中添加 decorators(装饰器)
- @import CSS into components
Storybook 允许直接在组件中导入 CSS 文件。 但在某些情况下,可能需要调整其 webpack 配置。
- Global imported styles
如果有全局导入的样式,请创建一个名为 .storybook/preview.js 的文件并在那里导入样式。 Storybook 会自动为所有故事添加它们。
- Add external CSS or webfonts in the
<head>
或者,如果想直接将 CSS 链接标记注入
<head>
(或其他一些资源,如 webfont 链接),可以使用 .storybook/preview-head.html 添加任意 HTML。
- 从本地目录加载字体或图像
如果从本地目录引用字体或图像,则需要配置 Storybook 脚本以提供静态文件。
加载资产和资源
如果要链接到项目或故事中的静态文件(例如,/fonts/XYZ.woff),请使用 -s path/to/folder 标志指定一个静态文件夹,以便在启动 Storybook 时提供服务。
为此,请编辑 package.json 中的 storybook 和 build-storybook 脚本。
建议使用 Storybook 静态提供组件中请求的外部资源和资产。 它确保资产始终可用于您的故事。