如何将自定义样式添加到样式组件?

Posted

技术标签:

【中文标题】如何将自定义样式添加到样式组件?【英文标题】:How to add custom styled to a styled component? 【发布时间】:2021-06-12 09:33:58 【问题描述】:

我有一个样式组件<Icon type="loader"/>。我想通过向此 Icon 组件添加一些自定义样式来创建另一个样式化组件。我需要将type 传递给 Icon 组件,我该如何实现?

const loader = styled(Icon)` font-size:'inherit'`

在没有任何道具的情况下直接传递图标可以正常工作。

我试过这个: const CustomIcon = () => <Icon type="loader"/>

const loader = styled(CustomIcon)` font-size:'inherit'`

这会出错。

【问题讨论】:

第一种方式 (const loader = styled(Icon)` font-size:'inherit'`) 似乎应该可以工作,尽管它应该是const Loader = styled(Icon)` font-size:'inherit'`,因为您要返回一个 React 组件。你有什么问题? 【参考方案1】:

我认为你的第一种方法就足够了。

const Loader = styled(Icon)`
  font-size: inherit;
`;

您可以将type="loader" 传递给Loader

<Loader type="loader" />

你也可以在定义Loader时指定type属性:

const Loader = styled(Icon).attrs(() => (
  type: 'loader',
))`
  font-size: inherit;
`;

用法:

<Loader /> // type="loader" passed to styled Icon

演示

演示代码:

const Icon = styled(( type, ...props ) => 
  switch (type) 
    case "loader":
      return <div ...props className=props.className + " loader" />;

    default:
      return <div ...props />;
  
)`
  font-size: 3rem;

  &.loader 
    color: red;
  
`;

const Loader = styled(Icon).attrs(() => (
  type: "loader"
))`
  font-size: initial; // overrides Icon fontsize
`;

...

<Icon>Test</Icon>
<Icon type="loader">Test</Icon>
<Loader>Test</Loader>

【讨论】:

以上是关于如何将自定义样式添加到样式组件?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Material UI 和 TypeScript 将自定义道具传递给样式化组件?

如何将自定义样式添加到 Angular Material Table 单元格的一小部分?

将自定义类/样式传递给 Gatsby (React) 中的样式化组件

JSF2 将自定义字体添加到 CSS 样式表

通过 Provider 将自定义 props 传递给每个样式化的组件

将自定义 css 添加到 React-Bootstrap 组件