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

如何为Storybook创建可选React组件列表的Arg参数

实现Card组件Storybook的图标选择控件

要在Card组件的Storybook页面中添加可切换的图标选择控件,按以下步骤操作:

1. 导入图标列表

在Card的Storybook文件中,先导入你定义的IconsList对象:

import { IconsList } from './path-to-icons-list'; // 替换为实际文件路径

2. 配置Icon参数的选择控件

修改argTypes中的icon配置,通过options定义下拉选项,mapping将选项映射到对应图标组件:

argTypes: {
  icon: {
    defaultValue: null,
    // 定义下拉选项:包含"无图标"和所有图标名称
    options: ['None', ...Object.keys(IconsList)],
    control: {
      type: 'select',
      // 可选:自定义下拉菜单显示的标签,让选项更直观
      labels: {
        None: '无图标',
        Icon1: '图标1',
        Icon2: '图标2',
        Icon3: '图标3'
      }
    },
    // 将选项键映射到对应的图标组件实例或null
    mapping: {
      None: null,
      ...IconsList
    }
  }
}

3. 完整的Storybook代码示例

import { Meta, Story } from '@storybook/react';
import Card from './Card';
import { IconsList } from './path-to-icons-list'; // 替换为实际路径

const CardTemplate: Story<CardProps> = (args) => <Card {...args} />;

export default {
  title: 'Display/Card',
  component: Card,
  args: {
    title: 'fluff',
    description: 'some description',
    icon: null
  },
  argTypes: {
    icon: {
      defaultValue: null,
      options: ['None', ...Object.keys(IconsList)],
      control: {
        type: 'select',
        labels: {
          None: '无图标',
          Icon1: '图标1',
          Icon2: '图标2',
          Icon3: '图标3'
        }
      },
      mapping: {
        None: null,
        ...IconsList
      }
    }
  }
} as Meta;

export const Default = CardTemplate.bind({});

原理说明

Storybook的select控件使用字符串类型的选项键更稳定,直接传入React组件实例可能存在序列化问题。通过mapping配置,我们将下拉选项的字符串键映射到对应的图标组件实例,这样既能在控制面板中展示友好的选择项,又能正确将图标组件传入Card中。

启动Storybook后,Card组件的控制面板会出现一个下拉选择框,切换选项即可实时更新Card中的图标。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 18:21:34