样式化的组件,带有 gatsby-link 锚标签 css 着色

Posted

技术标签:

【中文标题】样式化的组件,带有 gatsby-link 锚标签 css 着色【英文标题】:styled components, with gatsby-link anchor tag css coloring 【发布时间】:2018-09-13 07:24:26 【问题描述】:

我正在尝试使用styled-components 包从gatsby-link 包中设置<Link/> 组件的样式通常我只是创建一个const 给它一个Name 设置它等于styled.a 例如并编写我的css .但是,当我为<Link/> 创建const 时,我收到Duplicate declaration "Link" 错误。如何使用styled-components 设置<Link> 组件的样式。

下面是我的代码

import React from 'react';
import Link from 'gatsby-link';
import styled from "styled-components";

const Header = styled.div`
  margin: 3rem auto;
  max-width: 600px;
  background:red;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
`;

const Title = styled.h1`
  color: aqua;
`;

const Link = styled.a`
  color: aqua;
`;


export default () => (
  <Header>
        <Title>
          <Link to="/">
            Gatsby
          </Link>
        </Title>
  </Header>
);

【问题讨论】:

【参考方案1】:

重命名 Link 导入。

import Link as GatsbyLink from "gatsby";

如果您将组件命名为Link,您可能会遇到命名冲突,因为该名称在不同框架中无处不在。您描述的错误指出您有多个具有相同名称的组件。

明确命名您的组件(改编自@F*** Schultz 的回答):

import  Link as GatsbyLink  from "gatsby";

const StyledLink = styled(GatsbyLink)`
  color: aqua;
`;

// ...

<StyledLink to="/">
  Gatsby
</StyledLink>

【讨论】:

【参考方案2】:

您应该能够执行以下操作:

import  Link  from 'gatsby';

const StyledLink = styled(props => <Link ...props />)`
  color: aqua;
`;

// ...

<StyledLink to="/">
  Gatsby
</StyledLink>

过时版本(gatsby v1、styled-components v3):

import Link from 'gatsby-link';

const StyledLink = styled(Link)`
  color: aqua;
`;

// ...

<StyledLink to="/">
  Gatsby
</StyledLink>

【讨论】:

请注意,这似乎只适用于使用 styled('div')`` 语法的组件。不是像 react-emotion 这样的项目允许您使用的简写 styled.div`` 语法。 旁注:使用gatsby": "^2.0.98", 我必须先使用import Link from "gatsby";,然后再使用styled(props =&gt; &lt;Link ...props /&gt;),参见github.com/styled-components/styled-components/issues/…

以上是关于样式化的组件,带有 gatsby-link 锚标签 css 着色的主要内容,如果未能解决你的问题,请参考以下文章

样式化的组件最终样式通过 <styles /> 标签直接注入到 DOM 中,使用样式标签注入会影响性能吗?

样式化的组件选择上一个兄弟

样式化的组件输入失去焦点 onChange

如何更改锚标签内标题属性的样式?

如何更改锚标签内标题属性的样式?

我应该如何覆盖锚标签中 div 的悬停样式?