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

Posted

技术标签:

【中文标题】将自定义类/样式传递给 Gatsby (React) 中的样式化组件【英文标题】:Passing a custom class/style to a styled-component in Gatsby (React) 【发布时间】:2020-02-09 19:15:29 【问题描述】:

我为我的 gatsby 项目创建了以下样式组件。

import React from "react"
import styled,  css  from 'styled-components'


const Button = styled.div`
    background-color: #4E58F5;
    width: 200px;
    padding: 20px;
    margin-right: 30px;
    margin-top: 30px;
    border-radius: 30px;
    color: #FFFFFF;
    transition: background-color 0.25s ease;

  $props => props.primary && css`
    background-color: #FFF;
    color: red;
  `
`;

export default props => (
    <Button>props.buttonText</Button>
)

我没有发现文档中的示例足够清晰或一致,无法理解我应该如何将“主要”选项传递给我的组件。

我正在尝试在我的index.js 页面上执行以下操作。 Button 呈现,但主要单词没有效果。我在这里想念什么?

<Button primary buttonText="Submit" />

【问题讨论】:

你看过styled-components docs吗? 是的 - 没有明确的例子正是我想要的。我从另一个答案中弄清楚了。 【参考方案1】:

您要导出的组件无法识别 primary 属性,因此无法将其传递给 Button 元素。您可以通过导出样式组件本身或将无法识别的道具传递给 Button 来解决此问题。

const Button = styled.div`
  [...]
`;

export default Button;

export default (buttonText, ...props)=>(
  <Button ...props>buttonText</Button>
);

【讨论】:

谢谢!所以如果我选择第一个选项,下面的代码会去哪里? export default props =&gt; ( &lt;Button&gt;props.buttonText&lt;/Button&gt; ) - 即 buttonText 和处理的按钮结构在哪里? 不,在第一个示例中,文件以export default Button 行结尾,您必须将呼叫站点更改为&lt;Button primary&gt;Submit&lt;/Button&gt;。在第二个示例中,您可以继续将其称为 &lt;Button primary buttonText='submit'/&gt;,但您必须更改要导出的函数。

以上是关于将自定义类/样式传递给 Gatsby (React) 中的样式化组件的主要内容,如果未能解决你的问题,请参考以下文章

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

将自定义 CSS 类传递给 Kendo 的下拉小部件

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

如何将自定义分配器的完全相同的状态传递给多个容器?

将自定义尾风配置文件传递给 postcss 加载器

React Gatsbyjs 根据纵横比向 gatsby-image 添加类