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

Storybook中如何为对象类型的属性定义argTypes?

解法

Storybook 6.x的argTypes不支持嵌套写法配置子属性控制项,需要使用点语法路径作为argTypes的顶级键声明嵌套属性的控制规则,同时在args中声明完整的嵌套默认结构即可。

正确配置示例

export default {
  title: `Components/Input/text-input`,
  argTypes: {
    value: { control: 'text' },
    disabled: { control: 'boolean' },
    required: { control: 'boolean' },
    // 嵌套属性使用完整点路径作为键名
    'label.text': { control: 'text', name: 'Label Text' },
    'label.toolTip': { control: 'text', name: 'Label Tooltip' },
    'label.position': { 
      control: 'select', 
      options: ['north', 'south', 'east', 'west'],
      name: 'Label Position'
    }
  },
  // 必须声明完整的嵌套默认args结构,否则控制项不会渲染
  args: {
    value: 'Foobar',
    required: true,
    disabled: false,
    label: {
      text: 'Label for input',
      toolTip: 'Tooltip for the input\'s label',
      position: 'east'
    }
  }
};

// 模板直接使用args即可,Storybook会自动同步点路径控制项的修改到嵌套args结构
const Template = (args) => {
  const inputEl = document.createElement('your-input-component');
  inputEl.state = args;
  return inputEl;
};

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

注意事项

  • 可以通过name属性自定义控制面板显示的字段名,避免显示label.text这种路径式的名称
  • 不需要额外做扁平化/反向展开的适配,Storybook会自动处理点路径配置和嵌套args结构的双向同步,额外添加的适配逻辑反而会导致值覆盖、更新失效的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:39:03