我没有找到任何解决我的问题的答案。我正在用Typescript构建一个React Storybook。对于可选的 prop ,Storybook插件添加了一个"未定义"选项。我放置了一个defaultProps,但它不接受它。你有任何解决方案吗?
组件:
type IconType = 'outline' | 'solid'
export interface IconProps {
name: keyof typeof icons
size?: number
type?: IconType
className?: string
fallback?:
| boolean
| React.ReactChild
| React.ReactFragment
| React.ReactPortal
| null
}
const Icon = ({
name,
type = 'solid',
className = '',
size = 4,
fallback = null,
}: IconProps): JSX.Element => {
if (!name) {
throw new Error("Can't call Icon component without name props")
}
const Icon = React.lazy(
() => import(`../${type}/${icons[name]}`)
)
return (
<React.Suspense fallback={fallback}>
<Icon className={className} style={{width: size, height: size}} />
</React.Suspense>
)
}
Icon.defaultProps = {
type: 'solid',
}
export default Icon
故事:
import React from 'react'
import { Story, Meta } from '@storybook/react'
import Icon, { IconProps } from '.'
export default {
title: 'Components/Icon',
component: Icon,
} as Meta
const Template: Story<IconProps> = (args) => <Icon {...args} />
export const Basic = Template.bind({})
Basic.args = {
name: 'plus',
}
它告诉我:
当我选择undefined时,它不使用图标的默认属性😭
2条答案
按热度按时间nnvyjq4y1#
我也遇到了同样的问题,对我来说,它是这样工作的:
另外,当我试图导出并在其他地方使用这个故事时,它不起作用,因为类型不匹配:我可以通过在中间创建一个名为
BasicArgs
的附加类型对象,然后将其赋值给Basic.args
来解决这个问题。现在,您可以将其导入到其他位置并按如下方式使用:
abithluo2#
当设置故事书文本控件时,它总是返回类型字符串,有时我需要它是未定义的。我找到的一个解决方法是在故事中处理它并覆盖参数。