跳至内容
API 参考函数usePathname

usePathname

usePathname 是一个客户端组件钩子,允许你读取当前 URL 的路径名

app/example-client-component.tsx
'use client'
 
import { usePathname } from 'next/navigation'
 
export default function ExampleClientComponent() {
  const pathname = usePathname()
  return <p>Current pathname: {pathname}</p>
}

usePathname 故意要求使用客户端组件。需要注意的是,客户端组件不是一种性能优化。它们是服务器组件架构中不可或缺的一部分。

例如,带有 usePathname 的客户端组件将在初始页面加载时渲染到 HTML 中。导航到新路由时,不需要重新获取此组件。相反,组件只下载一次(在客户端 JavaScript 包中),并根据当前状态重新渲染。

了解一下:

  • 不支持从服务器组件读取当前 URL。这种设计是为了支持在页面导航之间保持布局状态。
  • 兼容模式
    • 当正在渲染回退路由或当 Next.js 已自动静态优化pages 目录页面并且路由器未准备好时,usePathname 可能会返回 null
    • next.config中间件中使用重写时,还必须使用 useStateuseEffect 以避免水合不匹配错误。有关更多信息,请参阅重写示例
    • 如果 Next.js 检测到项目中同时存在 apppages 目录,它将自动更新你的类型。

参数

const pathname = usePathname()

usePathname 不接受任何参数。

返回值

usePathname 返回当前 URL 路径名的字符串。例如

URL返回值
/'/'
/dashboard'/dashboard'
/dashboard?v=2'/dashboard'
/blog/hello-world'/blog/hello-world'

示例

响应路由更改执行操作

app/example-client-component.tsx
'use client'
 
import { usePathname, useSearchParams } from 'next/navigation'
 
function ExampleClientComponent() {
  const pathname = usePathname()
  const searchParams = useSearchParams()
  useEffect(() => {
    // Do something here...
  }, [pathname, searchParams])
}
版本更改
v13.0.0引入 usePathname