Во-первых, вам нужно иметь компонент с именем Link с временным атрибутом activeClassName
import { withRouter } from 'next/router'
import Link from 'next/link'
import React, { Children } from 'react'
const ActiveLink = ({ router, children, ...props }) => {
const child = Children.only(children)
let className = child.props.className || null
if (router.pathname === props.href && props.activeClassName) {
className = `${className !== null ? className : ''} ${props.activeClassName}`.trim()
}
delete props.activeClassName
return <Link {...props}>{React.cloneElement(child, { className })}</Link>
}
export default withRouter(ActiveLink)
Затем используйте панель навигации с созданным компонентом Link и селектором css :active
, чтобы различать активную и неактивную ссылку.
import Link from './Link'
export default () => (
<nav>
<style jsx>{`
.active:after {
content: ' (current page)';
}
.nav-link {
text-decoration: none;
padding: 10px;
display: block;
}
`}</style>
<ul>
<li>
<Link activeClassName='active' href='/'>
<a className='nav-link home-link'>Home</a>
</Link>
</li>
<li>
<Link activeClassName='active' href='/about'>
<a className='nav-link'>About</a>
</Link>
</li>
</ul>
</nav>
)
После этого вы можете реализовать панель навигации на своей странице:
import Nav from '../components/Nav'
export default () => (
<div>
<Nav />
<p>Hello, I'm the home page</p>
</div>
)
Ключ к тому, как эта работа находится внутри компонента Link, мы сравниваем значение router.pathname
с атрибутом href
из Link, если значение совпадает с другим, тогда помещаем конкретное className, чтобы ссылка выглядела активированной.
Ссылка: здесь