排列组合

使用表格展示组件的 Storybook 插件

在 Github 上查看
  • 免责声明:仅保证与基于 React 的项目兼容。其他框架可能会导致意外错误。
  • 仅限 TypeScript 项目。我们目前没有计划支持 JavaScript
  • 现在支持 Storybook 8

demo

此项目是一个插件,它为 Storybook 提供了额外的功能。在一个单独的面板中,您可以将组件的各个方面以表格的形式查看。

这个项目深受 Datadog 设计系统 DRUIDS 的启发,我们希望在 Storybook 中使用 DRUIDS 的组件排列功能。


🆘 帮助我们使 sb-addon-permutation-table 更加强大! 🆘

在 v1.0.0 版本发布后,我们尝试让 sb-addon-permutation-table 也支持 Vue 和 Svelte,但遇到了一点小障碍。我们的插件非常依赖一个 React hook,无法舍弃!目前,它仍然深深地爱着 React,还没有向其他框架敞开心扉。

如果我们能够摆脱 Panel 和 Preview 中的 React hooks,这个神奇的插件将可以在任何框架中闪耀。

你能伸出援手吗?🥺

-The Mighty Quest-

1. Take a peek at our GitHub - the code is all there, waiting for your brilliance.
2. Got any bright ideas? Quirky solutions? Magical spells 🧙‍♂️? Share them with us, and we'll be forever grateful!
3. Spread the word! Let your fellow developers know about "sb-addon-permutation-table"'s quest for multi-framework love.
4. Together, we can make "sb-addon-permutation-table" truly awesome for all frameworks out there! 🌟

目录

功能

  • 参数控制:直接操作组件的属性。您可以查看组件在上下文中的显示效果。

  • 排列组合:提供一个包含不同属性组合视图的表格。您可以一目了然地比较和分析组合结果。

安装

yarn add sb-addon-permutation-table

要求

  • Storybook >= 8.x
  • node > 16.x

对于 SB 7.x 以下的用户

为什么要使用它?

sb-addon-permutation 可以快速浏览复杂的多属性组件视图。开发人员可以通过提供的展示高效地调试和测试组件。

用法

.stories/main.ts 中添加插件代码,如下所示。

import type { StorybookConfig } from "@storybook/react-vite";
const config: StorybookConfig = {
  stories: ["../src/**/*.mdx", "../src/**/*.stories.@(js|jsx|ts|tsx)"],
  addons: ["sb-addon-permutation-table"],
  framework: {
    name: "@storybook/react-vite",
    options: {},
  },
  docs: {
    autodocs: "tag",
  },
};

export default config;

与 0.x 版本不同,从 1 版本开始,无需任何配置即可使用插件。插件会自动提取每个 Story 中的元素,但您可以通过传递参数来更细粒度地控制。作为参数接受的值如下所示。用作参数的值与 Preview 无关,而是指定在 Panel 中使用。

名称 描述 类型 默认值
componentName 显示在 Panel 中的组件名称 字符串? Story 的名称
importPath 单击“复制导入路径”按钮时复制的组件路径。 字符串? ""
children Story 组件中的子元素 字符串? {{children}}
deactivate 您不想使用排列组合功能的属性名称 字符串数组 []
autoload 加载 Story 时,您可以创建一个属性,该属性无需任何点击即可自动激活。 "all" 字符串数组 []

关于参数 children 的更多信息

children 参数指的是子元素代码的形状,当 children 作为参数传递给 Story 时,它将显示在 Panel 的 CodeEditor 区域中。将 children 作为参数传递将在 Preview 中正确显示,但在 Panel 中,children 将显示为 {{children}},除非您传递单独的参数。当您希望在 Panel 中显示 children 的结构时,请使用此参数。

另请参阅:如何在 Storybook 中使用 children 作为参数

示例

插件会自动使用组件的类型并在排列组合面板中提供。

// stories/Component.stories.(ts|tsx)

import React from "react";
import { PermutationMeta } from "sb-addon-permutation-table";
import YourComponent from "YourComponent";

const meta: PermutationMeta<typeof YourComponent> = {
  //...
  parameters: {
    permutation: {
      componentName: "Takahashi", // "Takahashi" in the panel, regardless of the name of the component.
      importPath: "@yourLib/yourComponent", // the value copied when clicked "Copy import" button
      children: "<div>Chef of the diamond city</div>", // a value passed to children
      deactivate: ["foo", "bar"], // deactviate property foo,bar
      autoload: "all", // activate all property except deactivated
    },
  },
};

您也可以在每个 Story 的基础上单独应用参数。

export const Primary: Story = {
  args: {
    primary: true,
    label:'Hello World'
  },
};

export const PermutationDeactivate: Story = {
  args:{
    label:'Hello World'
  }
  parameters: {
    permutation: {
      deactivate: ["primary", "size"],
    },
  },
};

高级

激活 autoload

启用 autoload 后,加载 Story 时会自动激活排列组合表格。

export const Primary: Story = {
  args: {
    primary: true,
  },
  parameters: {
    permutation: {
      // Now all element that can be permuted are now active when story is loaded
      autoload: "all",
    },
  },
};

您还可以仅启用某些属性

export const Primary: Story = {
  args: {
    primary: true,
  },
  parameters: {
    permuations: {
      // only 'foo' and 'bar' attribute will be activated
      autoload: ["foo", "bar"],
    },
  },
};

如果同时允许 autoload 和 deactivate,则 deactivate 优先。

export const Primary: Story = {
  args: {
    primary: true,
  },
  parameters: {
    permuations: {
      // only 'bar' attribute is permuted
      autoload: ["foo", "bar"],
      deactivate: ["foo"],
    },
  },
};

演示

演示页面

常见问题

我在 Story 上启用了排列组合,但它只显示具有相同参数的组件🥲

您是否使用装饰器作为 JSX 的一种形式?如果是,请确保正确地为 StoryFn 提供了检查上下文。如果未提供上下文,排列组合表将无法工作。

更改此内容

// .storybook/decorator.tsx

export const decorators = [
  (Story, context) => {
    return (
      <RandomWrapper>
        <ThemeProvider>
          <Story />
        </ThemeProvider>
      </RandomWrapper>
    );
  },
];

为这个👍

export const decorators = [
  (Story, context) => {
    return (
      <RandomWrapper>
        <ThemeProvider>{Story(context)}</ThemeProvider>
      </RandomWrapper>
    );
  },
];

检查为什么这样做有效


如果您遇到其他问题,请创建一个 问题 让我们知道。

许可证

MIT

赞助商

由以下人员制作
  • daim-dyl
    daim-dyl
与以下内容一起使用
    React
标签