useSearchParams
useSearchParams
是一个客户端组件 hook,让你能够读取当前 URL 的查询字符串。
useSearchParams
返回一个只读版本的 URLSearchParams
接口。
useSearchParams
不接收任何参数。
useSearchParams
返回一个只读版本的 URLSearchParams
接口,其中包含用于读取 URL 查询字符串的实用方法:
值得注意的是:
useSearchParams
是一个客户端组件 hook,在服务器组件中不支持使用,这是为了防止在部分渲染期间出现过期值。
- 如果应用程序包含
/pages
目录,useSearchParams
将返回 ReadonlyURLSearchParams | null
。在迁移过程中返回 null
值是为了兼容性,因为在不使用 getServerSideProps
的页面预渲染期间无法知道 search params。
如果路由是静态渲染的,调用 useSearchParams
将导致客户端组件树直到最近的 Suspense
边界进行客户端渲染。
这允许路由的一部分进行静态渲染,而使用 useSearchParams
的动态部分则在客户端渲染。
我们建议将使用 useSearchParams
的客户端组件包装在 <Suspense/>
边界中。这将允许其上方的任何客户端组件进行静态渲染,并作为初始 HTML 的一部分发送。示例。
例如:
如果路由是动态渲染的,useSearchParams
将在客户端组件的初始服务器渲染期间可用。
例如:
值得注意的是:设置 dynamic
路由段配置选项 为 force-dynamic
可以强制动态渲染。
要在 Pages(服务器组件)中访问 search params,使用 searchParams
属性。
与 Pages 不同,Layouts(服务器组件)不会接收 searchParams
属性。这是因为共享布局在导航期间不会重新渲染,这可能导致导航之间的 searchParams
过期。查看详细说明。
相反,使用 Page searchParams
属性或在客户端组件中使用 useSearchParams
hook,它会在客户端使用最新的 searchParams
重新渲染。
你可以使用 useRouter
或 Link
来设置新的 searchParams
。执行导航后,当前的 page.js
将接收更新后的 searchParams
属性。
版本 | 更改 |
---|
v13.0.0 | 引入 useSearchParams 。 |