如何在Next.js中使用next/navigation获取URL段

8qgya5xd  于 2023-10-18  发布在  其他
关注(0)|答案(1)|浏览(448)

我目前正在做一个Next.js项目,我试图使用next/navigationuseSearchParamsuseParams钩子来访问URL段。我使用Rewrite参数将source: '/chat/:id'Map到destination: '/chat',因此它被重写到带有:id段的聊天页面。然而,我遇到了一个问题,useParams返回一个空对象,useSearchParams返回null。

import { useParams, useSearchParams } from 'next/navigation'

export default function MyComponent() {
  // Current URL -> '/chat/1' (/chat/:id)
  const params = useParams()
  const searchParams = useSearchParams()
  console.log("params", params) // This logs an empty object {}
  console.log("searchParams", searchParams.get("id")) // This logs null
}

我知道useParams只返回dynamic params,就像/chat/[id]一样,但是当我导航到像/chat/:id这样的URL时,我希望searchParams.get("id")返回:id的值,但是它返回null。从next/router得到router.query,它给出了正确的值。是否无法使用next/navigation访问:id段?
这是useSearchParamsuseParams在尝试访问URL段时的预期行为吗?还是我错过了什么?
P.S. next/navigation似乎也不会导出beforePopstate或其他路由器事件。
编辑:刚刚意识到usePathname()返回带有:id段的路径名,这与从next/router返回的路径名值的行为不同,它只返回/chat,这是实际的路径名。

ie3xauqp

ie3xauqp1#

useSearchParams钩子函数用于获取放置在页面路径名之后的值,例如过滤器和其他值。例如,您可以将http://appname/chat/[id]作为路径名,然后在浏览器中搜索http://appname/chat/1?value=2
使用useSearchParams().get("value"),你会得到值2,使用useParams().id,你会得到值1。您应该使用useParams获取路径名中的值,并使用useSeachParams获取路径名后面的值。

相关问题