我试图简单地在标题导航中显示一个活动链接。在next〈13中,我使用了useRoute()
。然而,useRoute()在13+中不起作用。另一个问题是,如果你使用SSR,useRoute
不会被挂载。
因此,我的解决方法是确保全局布局是客户端组件。全局布局:
'use client';
import * as React from 'react';
import {Footer, Header, Sidebar} from '../components';
import '../styles/globals.css';
export default function RootLayout({children}: {children: React.ReactNode}) {
return <html>
<body>
<div className='wrapper'>
<Header pathname={window ? window.location.pathname : ''}/>
<Sidebar/>
<>
{children}
</>
<Footer />
</div>
</body>
</html>
}
导航条件:
<nav className={styles.navigation}>
<ul>
{URL.map(route => <li key={route.path}>
<Link
className={route.path === pathname ? styles.highlighted : ''}
href={route.path}
>
{route.name}
</Link>
</li>)}
</ul>
</nav>
但是它不能正常工作,并且在页面刷新后url才是active
。页面或布局中没有任何道具可以给我想要的行为。
我认为这是一件简单的事情,但我很难找到如何做到这一点在客户端和SSR。
先谢谢你了。
1条答案
按热度按时间vlf7wbxs1#
您可以使用只能在客户端使用的
usePathname
。此挂接在服务器组件中不可用。它不接受任何参数。
以下是如何在
Header
组件中删除pathname
属性并执行以下操作:您可以在这里看到一个工作示例