Storybook 的 Controls 为啥不显示我定义的 prop 控件?
我在写一个 React 组件的 Story,明明在 default export 里加了 argTypes,但 Controls 面板就是不显示对应的控件,比如这个:
export default {
title: 'Components/Button',
component: Button,
argTypes: {
size: {
control: { type: 'select', options: ['small', 'medium', 'large'] }
}
}
};
结果 Storybook 里 Controls 根本没出现 size 这个选项,是我哪里漏了吗?
别忘了在组件里也要接收这个 prop,不然 Storybook 找不到它就直接忽略了。累死我了,每次都要反复确认这些小细节。
size这个 prop?如果组件内部没用到它,或者你用的是 TypeScript 但没把size写进类型定义里,Controls 就不会识别出来。官方文档里说,argTypes 里的控件要生效,必须满足两个条件:一是组件确实接收这个 prop,二是 Storybook 能通过类型推断或 manual 配置识别它。
常见坑是:你用了 TypeScript,写了
interface ButtonProps { size?: string },但没加类型注解到组件的参数上,比如写成const Button = (props) => { ... }而不是const Button: React.FC = (props) => { ... } ,这样 Storybook 就推断不出size是个 prop,Controls 自然不显示。另外确认下 Storybook 版本,如果是 v7+,记得组件要通过
React.forwardRef或React.memo包裹时,也要显式写propTypes或用 TypeScript 正确注解,不然也会被忽略。如果确认组件接收了
size但还是不显示,可以在 Story 里加个args: { size: 'medium' }试试,有时候 Storybook 要看到初始 args 才会激活控件。