You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过编程方式自动生成Storybook Stories?

批量生成Storybook Stories的实现方案

完全可以通过循环批量生成Stories,完美解决多配置组合的繁琐问题,且完全支持Percy diffs生成。以下是具体实现步骤:

1. 生成所有配置组合的笛卡尔积

先定义每个配置项的可选值,再通过简单函数生成所有可能的组合:

// 定义你的可视化组件的配置选项及可选值
const configOptions = {
  showLabel: [true, false],
  showAxis: [true, false],
  // 可继续添加更多配置,比如showLegend: [true, false]等
};

// 生成所有配置组合的笛卡尔积
function generateConfigCombinations(options) {
  const configKeys = Object.keys(options);
  return configKeys.reduce((combinations, key) => {
    const values = options[key];
    return combinations.flatMap(prevConfig => 
      values.map(val => ({ ...prevConfig, [key]: val }))
    );
  }, [{}]);
}

// 得到所有配置组合
const allConfigs = generateConfigCombinations(configOptions);

2. 循环批量创建Stories

根据Storybook主流的Component Story Format(CSF)写法,遍历所有配置组合生成Stories:

import { MyVisualization } from './MyVisualization';

export default {
  title: 'Visualizations/MyChart',
  component: MyVisualization,
  // 全局设置Percy参数,确保快照生成符合需求
  parameters: {
    percy: {
      widths: [375, 1280], // 适配不同视口的快照
      // 若组件渲染有延迟,可添加delay参数:delay: 1000
    }
  }
};

// 循环生成每个Story
allConfigs.forEach(config => {
  // 生成唯一的Story名称,方便识别配置组合
  const storyName = Object.entries(config)
    .map(([key, value]) => `${key}: ${value}`)
    .join(', ');

  // 动态导出Story
  export const [storyName] = () => ({
    args: config, // 直接传入当前配置作为组件props
  });
});

如果使用旧版storiesOf写法,可参考以下实现:

import { storiesOf } from '@storybook/react';
import { MyVisualization } from './MyVisualization';

const storyGroup = storiesOf('Visualizations/MyChart', module);

allConfigs.forEach(config => {
  const storyName = Object.entries(config)
    .map(([key, value]) => `${key}: ${value}`)
    .join(', ');

  storyGroup.add(storyName, () => <MyVisualization {...config} />, {
    percy: {
      widths: [375, 1280]
    }
  });
});

3. 确保Percy Diffs正常工作

只要注意以下几点,就能保证Percy正确生成快照和diff:

  • 每个Story的名称必须唯一,避免Percy混淆快照
  • 组件渲染内容要稳定,比如动态数据需固定(避免随机数、实时接口数据)
  • 可针对特殊配置的Story单独设置Percy参数,比如某个配置需要更长的渲染延迟

内容的提问来源于stack exchange,提问作者lzl124631x

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 14:05:05