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

如何在Storybook中修改buttons时同步更新value的options选项?

解决Storybook for React Native中buttons数组与value下拉选项同步更新的问题

针对你使用的Storybook 6.0.1-beta.9版本,可以通过以下两种方式实现buttons数组修改时自动同步value的下拉选项:

方式一:动态计算options(推荐)

直接在argTypes中把value的options设为动态函数,从当前args的buttons数组里提取value值:

export default {
  title: 'Foo',
  component: Foo,
  args: {
    buttons: [
      { label: 'Lorem', value: 'Lorem' },
      { label: 'Ipsum', value: 'Ipsum' },
    ],
    value: 'Lorem',
  },
  argTypes: {
    value: {
      // 动态从buttons中提取value作为选项
      options: ({ args }) => args.buttons.map(btn => btn.value),
      control: { type: 'select' },
      // 映射确保选项值正确关联
      mapping: ({ args }) => args.buttons.reduce((acc, btn) => {
        acc[btn.value] = btn.value;
        return acc;
      }, {})
    },
  },
} as ComponentMeta<typeof Foo>;

这种方式不需要额外钩子,直接利用Storybook的options函数特性,当args.buttons修改时,下拉选项会自动更新。如果修改后的buttons导致当前value不在选项列表中,Storybook会自动将其重置为第一个有效选项。

方式二:使用Decorator结合useArgs钩子

如果需要更精细的控制(比如自定义value的重置逻辑),可以用decorators配合useArgs监听args变化:

import { useArgs } from '@storybook/client-api';

export default {
  title: 'Foo',
  component: Foo,
  args: {
    buttons: [
      { label: 'Lorem', value: 'Lorem' },
      { label: 'Ipsum', value: 'Ipsum' },
    ],
    value: 'Lorem',
  },
  argTypes: {
    value: {
      control: { type: 'select' },
    },
  },
  decorators: [
    (Story) => {
      const [args, updateArgs] = useArgs();
      const valueOptions = args.buttons.map(btn => btn.value);

      // 若当前value不在选项中,自动重置为第一个选项
      if (!valueOptions.includes(args.value) && valueOptions.length > 0) {
        updateArgs({ value: valueOptions[0] });
      }

      // 更新value的下拉选项
      return <Story argTypes={{
        ...args.argTypes,
        value: {
          ...args.argTypes?.value,
          options: valueOptions,
        }
      }} />;
    }
  ],
} as ComponentMeta<typeof Foo>;

注意:6.0.1-beta.9版本已支持useArgs钩子,可直接使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 23:10:31