参加直播:周四,美国东部时间上午 11 点,Storybook 9 发布及 AMA

Storybook Addon Root Attribute 用于在运行时切换故事的 html 或 body 属性

在 Github 上查看

Storybook Addon Root Attribute Build Status

Storybook Addon Root Attribute 用于在运行时切换故事的 html、body 或某些元素的属性 Storybook

演示

安装

yarn add -D storybook-addon-root-attribute

配置

然后,在你的 Storybook 配置中创建一个名为 addons.js 的文件,并将以下内容添加到其中

import "storybook-addon-root-attribute/register";

或者创建一个名为 main.js 的文件,并在 addons 部分添加插件

module.exports = {
  ...
  addons: [
    ...
    'storybook-addon-root-attribute/register'
  ]
};

用法

你需要在编译时使用 withRootAttribute 装饰器添加所有属性值。它们可以全局添加或按故事添加。然后你可以在插件 UI 上选择激活哪些根属性

// Import from @storybook/X where X is your framework
import {
  configure,
  addDecorator,
  addParameters,
  storiesOf
} from "@storybook/react";
import { withRootAttribute } from "storybook-addon-root-attribute";

// global
addDecorator(withRootAttribute);
addParameters({
  rootAttribute: {
    defaultState: {
      name: "Default",
      value: null
    },
    states: [
      {
        name: "Dark",
        value: "dark"
      }
    ]
  }
});

你可以使用 rootAttribute 参数单独覆盖每个故事的资源

// per story
storiesOf("Addons|RootAttribute", module).add(
  "Camera Icon",
  () => <i className="fa fa-camera-retro"> Camera Icon</i>,
  {
    rootAttribute: {
      defaultState: {
        name: "Default",
        value: null
      },
      states: [
        {
          name: "Dark",
          value: "dark"
        }
      ]
    }
  }
);

如果你想使用工具提示(面板不会消失),你需要在参数中将 tooltip 设置为 true

addParameters({
  rootAttribute: {
    tooltip: true,
    defaultState: {
      name: "Default",
      value: null
    },
    states: [
      {
        name: "Dark",
        value: "dark"
      }
    ]
  }
});

工具提示和面板关于属性更改不会同步。

配置

rootAttribute 参数的配置项

名称 默认值 变体 描述
root 'html' 'html'、'body',或 'document.querySelector()' 返回的第一个元素;如果未找到,则为 'html' 根节点,其属性将由插件更改
attribute 'class' 任何有效的属性名称 属性名称
defaultState {} 应包含 namevalue 属性的默认状态。值为 nil 将从根节点移除属性
states [] 包含对象的数组,这些对象包含属性的唯一 namevalue 属性值的所有所需状态。每个对象应包含唯一的 name(用于按钮)和属性的 value
tooltip false 布尔值 为 Storybook 添加工具提示按钮

配置示例

addDecorator(withRootAttribute);
addParameters({
  rootAttribute: {
    root: "html",
    attribute: "class",
    defaultState: {
      name: "Default",
      value: null
    },
    states: [
      {
        name: "Dark",
        value: "dark"
      },
      {
        name: "A11Y",
        value: "accessibility"
      }
    ]
  }
});