使用 Emotion.sh 从样式化组件传递道具

Posted

技术标签:

【中文标题】使用 Emotion.sh 从样式化组件传递道具【英文标题】:Passing props along from styled component using Emotion.sh 【发布时间】:2020-05-26 19:59:06 【问题描述】:

我使用@emotion\styled 声明了以下样式按钮:

const Button = styled.button`
 background: blue;
 $size(
  width: props => props.width
 )
`

在我的代码中,size 是一个函数,它根据传递的 prop 返回 size css 序列化样式:


const size = ( width: "m" = ) => 
 switch(width) 
  case "s":
   return css`width: 100px`;
  break;
  case "m":
   return css`width: 150px`;
  break;
 
 
<Button >Some text</Button>

但是,我在size 函数中收到的width 值不是来自传递的prop 的解析值,即s,而是一个字符串props =&gt; props.width

有什么方法可以将道具从样式组件传递到函数中,类似于我想要实现的功能?

【问题讨论】:

【参考方案1】:

它不起作用,因为您将匿名函数传递给 width,在您不期望函数的地方。

我很确定这就是你想要做的:

const Button = styled.button`
 background: blue;
 $props => size( width: props.width )
`

这样,您将在样式声明的范围内传递一个匿名函数,从 Emotion 获取道具并随意使用它。

【讨论】:

以上是关于使用 Emotion.sh 从样式化组件传递道具的主要内容,如果未能解决你的问题,请参考以下文章

样式化的 MUI 无法在 typescript 中将组件道具传递给 Typography

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

将图像作为道具传递给 Next.js 中的样式化组件

在样式化组件中设置 React 组件道具

如何使用 Typescript 在不丢失任何道具的情况下键入样式组件?

如何在不将道具传递给底层 DOM 元素的情况下扩展样式组件?