在 Markdown 中記錄元件用法和屬性

在 Github 上檢視

Storybook 文件

遷移指南:此頁面記錄了最近在 5.3.0 中引入的 Storybook 配置方法,如果要遷移到此 Storybook 配置格式,請參考遷移指南

Storybook 文件將您的 Storybook Stories 轉換為世界一流的元件文件。

DocsPage。 所有您的 Stories 都會直接獲得一個 DocsPageDocsPage 是一個零配置的聚合,將您的元件 Stories、文字描述、docgen 註解、屬性表格和程式碼範例整合到簡潔、易讀的頁面中。

MDX。 如果您想要更多控制權,MDX 允許您在同一個檔案中撰寫長篇幅的 Markdown 文件和 Stories。您也可以使用它來撰寫純文件頁面,並將它們嵌入到 Storybook 中的 Stories 旁邊。

就像 Storybook 一樣,文件支援所有主要的視圖層,包括 React、Vue、Angular、HTML、Web Components、Svelte 以及更多。

繼續閱讀以了解更多

DocsPage

當您安裝文件時,每個 Story 都會獲得一個 DocsPageDocsPage 從您的 Stories、元件、原始程式碼和 Story 元數據中提取資訊,以構建一個合理的、零配置的預設值。

點擊 Docs 標籤以查看

有關其工作原理的更多資訊,請參閱 DocsPage 參考

MDX

MDX 是一種語法,用於在同一個檔案中並排撰寫長篇幅的文件和 Stories。與提供現成智慧文件的 DocsPage 相比,MDX 讓您可以完全控制元件文件。

這是一個範例檔案

import { Meta, Story, Canvas } from '@storybook/addon-docs/blocks';
import { Checkbox } from './Checkbox';

<Meta title="MDX/Checkbox" component={Checkbox} />

# Checkbox

With `MDX` we can define a story for `Checkbox` right in the middle of our
markdown documentation.

<Canvas>
  <Story name="all checkboxes">
    <form>
      <Checkbox id="Unchecked" label="Unchecked" />
      <Checkbox id="Checked" label="Checked" checked />
      <Checkbox appearance="secondary" id="second" label="Secondary" checked />
    </form>
  </Story>
</Canvas>

這是它在 Storybook 中的渲染方式

有關 MDX 的更多資訊,請參閱 MDX 參考

框架支援

Storybook 文件支援 Storybook 支援的所有視圖層,除了 React Native(目前)。還有一些特定於框架的功能,例如屬性表格和內嵌 Story 渲染。此圖表捕捉了目前支援的狀態

React Vue Angular Ember Web Components HTML Svelte Preact Riot Mithril Marko
MDX Stories + + + + + + + + + + +
CSF Stories + + + + + + + + + + +
StoriesOf Stories + + + + + + + + + + +
原始碼 + + + + + + + + + + +
註解 / 資訊 + + + + + + + + + + +
屬性表格 + + + + +
屬性控制項 + + +
描述 + + + + +
內嵌 Stories + + + + +

注意: # = 開發中支援

想要為您喜愛的框架新增增強功能嗎?請查看此開發指南

安裝

首先新增套件。請確保您的 @storybook/* 套件版本相符

yarn add -D @storybook/addon-docs

文件對 reactbabel-loader 有對等依賴性。如果您想在 MDX 中撰寫 Stories,您可能還需要新增這些依賴項

yarn add -D react babel-loader

然後將以下內容新增至您的 .storybook/main.js

module.exports = {
  stories: ['../src/**/*.stories.@(js|mdx)'],
  addons: ['@storybook/addon-docs'],
};

如果與storyshots 擴充套件一起使用,您需要設定 Jest 以將 MDX Stories 轉換為 Storyshots 可以理解的內容

將以下內容新增至您的 Jest 配置中

{
  "transform": {
    "^.+\\.[tj]sx?$": "babel-jest",
    "^.+\\.mdx$": "@storybook/addon-docs/jest-transform-mdx"
  }
}

請務必檢查特定框架的安裝需求

預設選項

addon-docs 預設值有一些設定選項,可用於配置其 babel/webpack 載入行為。以下是如何使用帶選項的預設值的範例

module.exports = {
  addons: [
    {
      name: '@storybook/addon-docs',
      options: {
        configureJSX: true,
        babelOptions: {},
        sourceLoaderOptions: null,
        transcludeMarkdown: true,
      },
    },
  ],
};

當您在 MDX 中撰寫文件,且您專案的 babel 配置尚未設定為處理 JSX 檔案時,configureJSX 選項非常有用。當您使用 configureJSX 時,babelOptions 是一種進一步配置 babel 處理器的方式。

sourceLoaderOptions 是一個用於配置 @storybook/source-loader 的物件。當設定為 null 時,它會告知文件完全不要執行 source-loader,這可以用作優化,或者如果您已經在您的 main.js 中使用 source-loader

transcludeMarkdown 選項允許 mdx 檔案匯入 .md 檔案並將其渲染為元件。

import { Meta } from '@storybook/addon-docs/blocks';
import Changelog from '../CHANGELOG.md';

<Meta title="Changelog" />

<Changelog />

手動配置

我們建議使用預設值,它應該可以直接使用。如果您不想使用預設值,並且更喜歡「長途跋涉」配置,請將以下配置新增至 .storybook/main.js(請參閱內嵌註解以了解說明)

const createCompiler = require('@storybook/addon-docs/mdx-compiler-plugin');

module.exports = {
  // 1. register the docs panel (as opposed to '@storybook/addon-docs' which
  //    will configure everything with a preset)
  addons: ['@storybook/addon-docs/register'],
  // 2. manually configure webpack, since you're not using the preset
  webpackFinal: async (config) => {
    config.module.rules.push({
      // 2a. Load `.stories.mdx` / `.story.mdx` files as CSF and generate
      //     the docs page from the markdown
      test: /\.(stories|story)\.mdx$/,
      use: [
        {
          loader: 'babel-loader',
          // may or may not need this line depending on your app's setup
          options: {
            plugins: ['@babel/plugin-transform-react-jsx'],
          },
        },
        {
          loader: '@mdx-js/loader',
          options: {
            compilers: [createCompiler({})],
          },
        },
      ],
    });
    // 2b. Run `source-loader` on story files to show their source code
    //     automatically in `DocsPage` or the `Source` doc block.
    config.module.rules.push({
      test: /\.(stories|story)\.[tj]sx?$/,
      loader: require.resolve('@storybook/source-loader'),
      exclude: [/node_modules/],
      enforce: 'pre',
    });
    return config;
  },
};

您還需要在 .storybook/preview.js 中設定 docs 參數。這包括用於渲染頁面的 DocsPage、容器和各種配置選項,例如用於手動提取元件描述的 extractComponentDescription

import { addParameters } from '@storybook/react';
import { DocsPage, DocsContainer } from '@storybook/addon-docs/blocks';

addParameters({
  docs: {
    container: DocsContainer,
    page: DocsPage,
  },
});

TypeScript 配置

從 SB6 開始,TypeScript 是零配置,應該可以直接與 SB 文件一起使用。有關進階設定選項,請參閱屬性文件

更多資源

想了解更多嗎?以下是一些關於 Storybook 文件的文章