Next.js 14 Link标签无法预取数据:Network Tab显示空{}(getServerSideProps场景)
Next.js 14 Page路由+getServerSideProps下Link预取显示空对象{}的问题解决
问题场景
使用Next.js 14的Page路由开发,通过<Link>标签预取目标页面数据时,开发者工具Network Tab的预览区域仅显示空对象{},而非预期的JSON响应,目标页面使用getServerSideProps获取数据。
可能的原因及解决方案
1. 检查getServerSideProps的返回格式
getServerSideProps必须返回包含props字段的对象,若props为空或未正确赋值,预取响应就会显示空对象。
- 正确示例:
export async function getServerSideProps(context) { // 实际数据请求逻辑 const response = await fetch('https://api.example.com/data'); const data = await response.json(); // 确保返回包含props的对象,且props有有效数据 return { props: { data } }; } - 排查点:确认数据请求是否成功、返回数据是否非空,添加错误处理避免请求失败导致
props缺失。
2. 强制开启Link预取行为
Next.js的<Link>默认仅在元素进入视口时触发预取,若未触发预取,可能看不到预期的请求。可以手动强制开启预取:
import Link from 'next/link'; // 强制开启预取 <Link href="/target-page" prefetch={true}>跳转至目标页面</Link>
3. 验证预取时getServerSideProps是否执行
在getServerSideProps中添加日志,确认预取请求是否触发了该函数,以及返回的props是否符合预期:
export async function getServerSideProps(context) { console.log('getServerSideProps 执行,请求来源:', context.req.headers.referer); const data = await fetchSomeData(); console.log('获取到的数据:', data); return { props: { data } }; }
查看终端日志,若预取时未执行该函数,说明预取未触发,需检查Link的写法或页面结构。
4. 清除缓存并重新构建
Next.js的缓存可能导致预取数据异常,尝试以下步骤:
- 删除项目根目录下的
.next文件夹 - 删除
node_modules并重新执行npm install - 重启开发服务器(
npm run dev)
内容的提问来源于stack exchange,提问作者Waquar Mahboob
相关产品推荐
相关产品推荐

