【发布时间】:2021-11-04 16:07:33
【问题描述】:
我有以下问题:
我在我的项目中定义了一些图标。每个图标都由一个组件类型(来自 Material-UI 的图标)加上一些额外的道具定义。我就是这样做的,所以我可以用不同的方式渲染这些图标。
无论如何,假设我想在 2 个地方重复使用相同的图标,但在一个地方我希望它是红色的,在另一个地方我希望它是绿色的。 MUI 图标不接受颜色道具(我的意思不是 RGB 图标,只是一些预定义的颜色)。所以这样做的方法是用css(color:)设置图标组件的样式。
我使用styled-components,所以我通常这样做的方式是:
const StyledIcon = styled(AssignmentIcon)`
color: red
`
但问题是,在某些地方我不知道我会设计哪个图标。例如,某些组件可能会收到带有AssignmentIcons 和BugReportIcons 的列表。与 styled-components 一样,我无法在另一个组件中定义样式化的组件 - 所以我无法创建像上面那样的样式,而只是将图标从道具传递给它。
我是这样解决的:https://codesandbox.io/s/nostalgic-hofstadter-ww2ly。基本上,我有一个styleIcon 函数,它接受React.ComponentType(当然是动态的),放入styled() 并返回它。这样我就为图标应用了一些样式,现在我可以渲染它了。
我的问题是:这似乎有点粗略,有一些辅助功能来完成这项工作。有没有更简单的方法来做到这一点? (顺便说一句,我在渲染图标时不能使用 style={{}} 道具 - 它可能会与我通过道具传播应用的其他样式发生冲突)
【问题讨论】:
标签: javascript css reactjs styled-components