在 next.js 中获取不是动态路由参数的查询参数
Get query parameters that aren't dynamic route parameters in next.js
我有一个组件需要从 URL 复制所有查询参数。但是我不想复制动态路由参数。因此,如果它用在像这样的组件中:/pages/model/{modelId}.tsx
并且 url 是 /model/123456?page=2&sort=column&column=value
,我想检索以下对象:
{
page: 2,
sort: "column",
column: "value"
}
我会使用 useRouter().query
,但这会包括 modelId
。并且路由器对象似乎没有任何其他参数列表。
那么我如何区分常规 URL 参数和动态路由参数?
为什么不用 built-in URL API 代替:
const url = new URL(window.location.href);
url.searchParams.get("page"); // a string or null if not present
更进一步,您还可以将其包裹在钩子中以备将来使用。
如果您希望将搜索参数作为一个对象,您也可以将其包装在 Object.fromEntries
中:
const params = Object.fromEntries(new URL(window.location.href).searchParams);
params.page; // string or undefined now
在我的例子中,我从查询对象中删除了不需要的键。在这种情况下,动态 url 参数。
我为此使用了 lodash,但这仅需 Javascript 即可完美完成。
export const ignoreQueryParam = (obj, key) => _.omit(obj, key);
适用于您的情况:
const router = useRouter();
const searchQuery = ignoreQueryParam(router.query, 'modelId');
希望对您有所帮助。
我有一个组件需要从 URL 复制所有查询参数。但是我不想复制动态路由参数。因此,如果它用在像这样的组件中:/pages/model/{modelId}.tsx
并且 url 是 /model/123456?page=2&sort=column&column=value
,我想检索以下对象:
{
page: 2,
sort: "column",
column: "value"
}
我会使用 useRouter().query
,但这会包括 modelId
。并且路由器对象似乎没有任何其他参数列表。
那么我如何区分常规 URL 参数和动态路由参数?
为什么不用 built-in URL API 代替:
const url = new URL(window.location.href);
url.searchParams.get("page"); // a string or null if not present
更进一步,您还可以将其包裹在钩子中以备将来使用。
如果您希望将搜索参数作为一个对象,您也可以将其包装在 Object.fromEntries
中:
const params = Object.fromEntries(new URL(window.location.href).searchParams);
params.page; // string or undefined now
在我的例子中,我从查询对象中删除了不需要的键。在这种情况下,动态 url 参数。
我为此使用了 lodash,但这仅需 Javascript 即可完美完成。
export const ignoreQueryParam = (obj, key) => _.omit(obj, key);
适用于您的情况:
const router = useRouter();
const searchQuery = ignoreQueryParam(router.query, 'modelId');
希望对您有所帮助。