我正在尝试使用 Next.js 突出显示活动链接的导航栏(我也在使用 React-bootstrap,以作记录)。
我尝试遵循本指南,以及一些突出显示的作品,而另一些则没有。
我当前的代码:
自定义链接.jsx:
import { useRouter } from 'next/router';
import Link from 'next/link';
import React, { Children } from 'react';
const CustomLink = ({ children, activeClassName, ...props }) => {
const { asPath } = useRouter();
const child = Children.only(children);
const childClassName = child.props.className || '';
const className =
asPath === props.href || asPath === props.as
? `${childClassName} ${activeClassName}`.trim()
: childClassName;
return (
<Link {...props} passHref>
{React.cloneElement(child, {
className: className || null,
})}
</Link>
);
};
export default CustomLink;
导航.jsx:
import Navbar from 'react-bootstrap/Navbar';
import Nav from 'react-bootstrap/Nav';
import CustomLink from '../CustomLink/CustomLink';
export default function Navigation() {
return (
<>
<Navbar collapseOnSelect expand="lg" bg="dark" variant="dark">
<CustomLink activeClassName="active" href="/">
<img src="/logo.svg" alt="WhiteQueen Logo" height={50} />
</CustomLink>
<Navbar.Toggle aria-controls="responsive-navbar-nav" />
<Navbar.Collapse id="responsive-navbar-nav">
<Nav className="mr-auto">
<CustomLink activeClassName="active" href="/">
<Nav.Link>Home</Nav.Link>
</CustomLink>
<CustomLink activeClassName="active" href="/publications">
<Nav.Link>Publications</Nav.Link>
</CustomLink>
<CustomLink activeClassName="active" href="/links">
<Nav.Link>Links</Nav.Link>
</CustomLink>
</Nav>
<Nav>
<CustomLink activeClassName="active" href="/contact">
<Nav.Link>Contact</Nav.Link>
</CustomLink>
</Nav>
</Navbar.Collapse>
</Navbar>
</>
);
}
我的问题:
单击导航栏左侧的任何链接都可以正常工作,这意味着它会突出显示选定的链接并清除前一个链接。但这仅在“主页”、“出版物”和“链接”之间循环时才是正确的。
如果我单击右侧的链接(“联系人”)或徽标上的链接,则不会清除当前活动的类,例如“出版物”,并且两者(以前活动的和当前选择的)都显示为突出显示。
同样,如果我在“联系人”上,则转到其他组的任何项目都不会清除其突出显示。
如果我刷新页面,链接将恢复为正确突出显示。
我错过了什么?