Storybook 中如何正确使用 Args 传递复杂对象参数?
我在写一个按钮组件的 Story,想通过 args 传一个包含 icon 和 size 的配置对象进去,但发现组件里拿到的是字符串 “[object Object]”,而不是真正的对象。明明文档说 args 支持任意类型,是我哪里写错了吗?
我试过直接在 args 里写对象,也试过用 argTypes 声明类型,都不行。控制台没报错,但组件渲染就出问题了。
export const Primary = {
args: {
config: { icon: 'search', size: 'large' }
}
};
// 组件内部:console.log(typeof config) // 输出 "string"???
我们可以通过以下步骤来解决这个问题:
1. 首先,确保你的组件能够正确接收和处理对象类型的 props。假设你的按钮组件接受一个
configprop,它应该能够解析这个对象。2. 在你的 Story 文件中,确保正确地定义
argTypes,特别是对于复杂的对象类型。虽然你提到尝试过用argTypes声明类型,但是可能需要进一步配置来确保对象被正确传递。3. 使用
control类型为'object'来明确告诉 Storybook 你的config是一个对象。这样可以确保在控制面板中也能正确显示和编辑这个对象。4. 最后,确保在你的组件内部正确地解构或使用
config对象。下面是具体的代码示例:
在这个例子中,我们在
argTypes中设置了control类型为'object',这告诉 Storybook 你的config参数是一个对象。这样,当你在 Storybook 中查看和编辑config参数时,它会作为一个对象来处理,而不是被转换为字符串。希望这能解决你的问题!如果还有其他疑惑,尽管问我。有时候这些小细节真的挺让人抓狂的。
如果你坚持用 args,试试在组件里用
JSON.parse()解析一下,虽然有点土但能救急。