Next13已经发布,他们建议使用新的app
目录,其中每个组件默认都是一个"服务器组件"
在“服务器组件”内部,您可以使用:
async/await
来获取数据。cookies()
来检索cookieheaders()
来检索请求头。
但我找不到如何检索查询参数。
在Next 13之前,在getServerSideProps
中,您可以使用context.query
访问查询参数。
您知道如何在Next 13中使用“服务器组件”检索查询参数吗?
Next13已经发布,他们建议使用新的app
目录,其中每个组件默认都是一个"服务器组件"
在“服务器组件”内部,您可以使用:
async/await
来获取数据。cookies()
来检索cookieheaders()
来检索请求头。但我找不到如何检索查询参数。
在Next 13之前,在getServerSideProps
中,您可以使用context.query
访问查询参数。
您知道如何在Next 13中使用“服务器组件”检索查询参数吗?
我认为目前在任意组件中实现这个功能是不可能的。不过,在page.tsx
文件中可以访问查询参数,并通过props传递给组件。
export default function Page({
params,
searchParams,
}: {
params: { slug: string };
searchParams?: { [key: string]: string | string[] | undefined };
}) {
return <h1>{searchParams?.greeting || "Hello!"}</h1>;
}
请参阅文档
searchParams
对我来说很有效。谢谢。 - Rahmat Oktrifianto我知道这听起来很糟糕,但我也没有找到任何东西,所以你必须自己解析它
这里有一个例子
import type { NextRequest, NextResponse } from 'next/server';
import qs from 'qs';
export async function GET(request: NextRequest, response: NextResponse) {
try {
const rawParams = request.url.split('?')[1];
const params = qs.parse(rawParams);
// Now you have access to the query String parameters //
// Or you can do it this way
const yourParamName = request.nextUrl.searchParams.get('paramName');
// also try getAll() I think that might work
} catch (error: unknown) {
console.log(error);
}
}
req.nextUrl.searchParams
,它返回 URLSearchParams
。您可以通过 req.nextUrl.searchParams.get("paramName")
获取特定参数。 - Nishant最后,我发现了在Next.js 13.4中获取查询值的简便方法。
const url = new URL(request.url);
const searchParams = new URLSearchParams(url.search);
const skip = searchParams.get("skip"); // Retrieves the value of the 'skip' parameter
const limit = searchParams.get("limit"); // Retrieves the value of the 'limit' parameter
console.log(skip);
console.log(limit);
request
变量具体是从哪里来的?我在应用程序路由/Next.js的范围内没有看到它。 - cevaris// /middleware.ts
import { NextResponse } from 'next/server';
export default function middleware(request: NextRequest, event: NextFetchEvent) {
request.headers.set('x-url', request.url);
return next(request, event);
}
import { headers } from 'next/headers';
export const ServerComponent = () => {
const url = new URL(headers().get('x-url')!);
const searchParams = url.searchParams;
// ...
}
export async function GET(request) {
const queryString = request.url.split('?')[1];
const page = Number(new URLSearchParams(queryString).get('page')) || 1;
const limit = Number(new URLSearchParams(queryString).get('limit')) || 1;
console.log(page)
console.log(limit)
return NextResponse.json({ 'status': true }, { status: 200 })
}