在 Next.js 13 中,可以通过使用新的 Middleware 功能和 Edge Runtime 来从中间件传递数据到组件。具体步骤如下:
-
创建或修改中间件: 在 Next.js 应用的
middleware.ts
文件中,你可以处理请求并使用NextResponse
对象进行响应。在这个阶段,你可以设置需要传递给组件的数据。 -
设置响应头或Cookies: 在中间件中,可以通过设置响应头或Cookies来传递数据。例如,你可以将计算或获取的数据序列化为一个JSON字符串,并将这个字符串作为一个响应头或Cookie添加到
NextResponse
对象中。typescriptimport { NextResponse } from 'next/server'; export function middleware(request) { const data = { user: 'John Doe', age: 30 }; const response = NextResponse.next(); response.headers.set('X-Custom-Data', JSON.stringify(data)); return response; }
-
在组件中获取数据: 在 Next.js 的页面或组件中,你可以通过
getServerSideProps
或getStaticProps
(取决于页面的数据获取方式)来读取设置在步骤2中的响应头或Cookies。typescriptexport async function getServerSideProps({ req }) { const data = req.headers['x-custom-data']; const parsedData = JSON.parse(data); return { props: { userData: parsedData } }; }
在上述示例中,
getServerSideProps
从请求的头部中获取名为X-Custom-Data
的头部信息,解析该数据,然后将其作为属性传递给Next.js的React组件。
通过这种方式,你可以安全且有效地从中间件传递数据到你的React组件,利用 Next.js 的全新架构和功能。