javascript - 有条件地使用material-ui默认道具
问题描述
我StepLabel
在材料 ui 中有一个组件。根据传递给父级的道具,我可能想更改icon
StepLabel 的道具:
interface Props {
customClasses?: ClassNameMap;
customIcon?: ReactNode;
}
const MyStepComponent = (props: Props) => {
const { customClasses, customIcon } = props
return (
<Stepper {...stepperProps}>
<Step
icon={
customIcon
? React.cloneElement(customIcon as React.ReactElement, {
className: customClasses?.stepIcon
})
: null
}
{...otherStepProps}
/>
</Stepper>
)
}
因此,在这种情况下,如果将 acustomIcon
传递给MyStepComponent
它,它将呈现该图标而不是默认图标,并且如果customClasses
也传递了它,它会将其中一些自定义类应用于该图标。伟大的。
但是如果customIcon
没有通过,我希望Step
组件只使用它的默认图标(这是带有步骤号的蓝色圆圈)。但是,在我的代码中,它不会呈现默认图标,而是呈现null
.
如果存在,我如何告诉它Step
使用我的customIcon
,但如果不存在,则使用默认值?
解决方案
如果 customIcon 是真实的,那么第一个 if 将被触发,并且带有自定义图标的组件将被渲染。
const MyStepComponent = (props: Props) => {
const { customClasses, customIcon } = props
if (customIcon) {
return (
<Stepper {...stepperProps}>
<Step
icon={ React.cloneElement(customIcon as React.ReactElement, {
className: customClasses?.stepIcon
})
}
{...otherStepProps}
/>
</Stepper>
)
}
return (
<Stepper {...stepperProps}>
<Step
icon={defaultIcon}
{...otherStepProps}
/>
</Stepper>
)
}
推荐阅读
- jquery - 需要获取复选框行的值
- flutter - 颤振热重载不适用于平板电脑模拟器
- login - 如何手动/以编程方式在typo3中创建和登录前端用户(feuser)?
- asp.net - 使用 Ajax 表单调用更新网站的一部分
- azure - 解密 Azure Function App 操作机密
- python - 在 PyPlot 中按月-年绘制纪元列表的直方图,x 轴
- javascript - 如何更改模糊的输入值?
- java - javax.net.ssl.SSLHandshakeException:收到致命警报:handshake_failure java 1.7_45
- c++ - 我可以指定我的可执行文件链接到一个或其他库,例如 libhello.so 或 libhellod.so?
- c# - 如何从gridview计算时间hh:mm