javascript - 如何在 Next.js 的事件页面上设置链接组件的样式

标签 javascript node.js reactjs next.js styled-components

我有一个关于在事件页面上设置 anchor 组件样式的问题。
这是我的代码:

import Link from 'next/link';
import styled from 'styled-components';

const NavStyle = styled.nav`
    display: flex;
    justify-content: space-between;
    .nav-link a {
        text-decoration: none;
        color: white;
        padding: 10px;
        background-color: #FFCF00;
    }
`;

export default function Nav() {
    return (
        <NavStyle>
            <div className="nav-link">
                <Link href="/" passHref>
                    <a>HOME</a>
                </Link>
                <Link href="/pricing">
                    <a>PRICING</a>
                </Link>
                <Link href="/terms">
                    <a>TERMS</a>
                </Link>
                <Link href="/login">
                    <a>LOGIN</a>
                </Link>
            </div>
            <Link href="/">
                <a>LOGO</a>
            </Link>
        </NavStyle>
    )
}
我想要的是,当我单击链接并移动到另一个页面时,事件链接(与 URL 匹配)将具有绿色背景。我试过这个,但没有任何改变:
const NavStyle = styled.nav`
    display: flex;
    justify-content: space-between;
    .nav-link a {
        text-decoration: none;
        color: white;
        padding: 10px;
        background-color: #FFCF00;
        &[aria-current] {
          background-color: green;
       }
    }
`;

最佳答案

Next.js 不会添加 aria-current到您的事件链接;但是,您可以创建自定义 Link检查当前 pathname 是否存在的组件与 href 相同支柱。

import React from "react";
import Link from "next/link";
import { useRouter } from "next/router";

const NavLink = ({ children, href }) => {
  const child = React.Children.only(children);
  const router = useRouter();

  return (
    <Link href={href}>
      {React.cloneElement(child, {
        "aria-current": router.pathname === href ? "page" : null
      })}
    </Link>
  );
};

export default NavLink;
然后,您可以使用此组件代替默认的 Link随时添加aria-current到事件链接:
const NavStyle = styled.nav`
  display: flex;
  justify-content: space-between;

  a {
    background-color: #353637;
    color: #fff;
    padding: 1rem;
    text-decoration: none;

    &[aria-current] {
      background-color: #faf9f4;
      color: #353637;
    }
  }
`;

export default function Nav() {
  return (
    <NavStyle>
      <div className="nav-link">
        <NavLink href="/">
          <a>HOME</a>
        </NavLink>
        <NavLink href="/pricing">
          <a>PRICING</a>
        </NavLink>
        <NavLink href="/terms">
          <a>TERMS</a>
        </NavLink>
        <NavLink href="/login">
          <a>LOGIN</a>
        </NavLink>
      </div>
      <Link href="/">
        <a>LOGO</a>
      </Link>
    </NavStyle>
  );
}

关于javascript - 如何在 Next.js 的事件页面上设置链接组件的样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66061638/

相关文章:

javascript - 在 CoffeeScript 中重新实现 UnderscoreJS 链接

javascript - 使用WCF Rest进行跨域调用时出错

javascript - 理解递归遍历、of和reduce示例

node.js - 如何解决此内容安全策略错误?

sql - 在 Meteor 中使用经典的 node.js ORM

javascript - 在 Reactjs 中创建依赖字段?

javascript - React Portals 解决了什么问题?

javascript - ASP.NET 3.5 AJAX 控件工具包 PopupControlExtender

javascript - 无法读取未定义的属性 'handle'。 Parse.com 迁移

reactjs - 点击模式外部以关闭模式(react-native-modal)