使用 styled-components 设置 Router Link 的样式

Posted

技术标签:

【中文标题】使用 styled-components 设置 Router Link 的样式【英文标题】:Styling a Router Link with styled-components 【发布时间】:2020-04-04 21:58:58 【问题描述】:

在下面的代码中,使用 styled-components 库设置 Link 样式的最佳方式是什么。 我可以找到很多使用锚标记的示例,但没有一个使用 react-router 链接的示例。 我的方法是否正确。

import React from "react";
import  Link  from "react-router-dom";
import styled from "styled-components";

const Nav = ( className ) => 
  return (
    <div className=className>
      <ul>
        <li>
          <Link to="/">Home</Link>
        </li>
        <li>
          <Link to="/about">About</Link>
        </li>
      </ul>
    </div>
  );
;
export default styled(Nav)`
  color: white;
  text-align: left;
  background: teal;
  width: 100%;
  ul 
    color: red;
    display: flex;
    flex-direction: row;
    border: 1px solid green;
    list-style: none;
    li 
      padding: 15px 15px;
      border: 2px solid purple;
    
  
`;

谢谢 约瑟夫·沙纳汉

【问题讨论】:

【参考方案1】:

react-router link 毕竟在 &lt;a&gt; 标记中转换为,因此以与设置 &lt;a&gt; 标记相同的方式设置它们 因此,假设您需要将它们的颜色更改为红色:

ul 
    color: red;

行不通,你需要这样做:

ul a 
    color: red;

【讨论】:

【参考方案2】:

您的方法是正确的,但几乎没有错,您只需传递组件引用,而不是使用 ul

export default styled(Nav)`
  color: white;
  text-align: left;
  background: teal;
  width: 100%;
  $Link 
    /* style for Link Component */
  
`;

查看这个answer,很熟悉。

【讨论】:

【参考方案3】:

如果您只想设置 Link 组件的样式,那么根据我的经验,通常的方法是创建一个样式组件,如下所示:

const NavLink = styled(Link)`
  /* Link styles */
`

然后像&lt;NavLink&gt;Home&lt;/NavLink&gt;一样渲染它。

这也使得重用这个样式化的组件变得很容易。

【讨论】:

【参考方案4】:

是的,感谢您的帮助。我将实施的精简版本如下。 它还有一个优点是我不必实现无序列表。

import React from "react";
import  Link  from "react-router-dom";
import styled from "styled-components";

const Nav = ( className ) => 
  return (
    <div className=className>
      <NavLink to="/">Home</NavLink>
      <NavLink to="/about">About</NavLink>
    </div>
  );
;
const NavLink = styled(Link)`
  padding: 20px;
  color: white;
  text-decoration: none;
  &:hover 
    color: red;
    background: blue;
  
`;
export default styled(Nav)`
  color: white;
  width: 100%;
  display: flex;
  justify-content: flex-end;
`;

感谢约瑟夫·沙纳汉

【讨论】:

以上是关于使用 styled-components 设置 Router Link 的样式的主要内容,如果未能解决你的问题,请参考以下文章

styled-components - 如何在 html 或 body 标签上设置样式?

在 GatsbyJS 中使用 styled-components 设置自定义组件的样式

在 react-native 中使用 styled-components 不会覆盖样式

使用 styled-components 在组件/元素之间共享样式

无法使用 styled-components 将样式应用于 React Native 中的自定义组件?

Emotion vs Styled-Components css` prop