在 next.js 新的 app router 中,`getserversideprops` 已被弃用,应直接在服务端组件中使用 `async/await` 执行数据获取,无需特殊导出函数。
Next.js 13+ 引入的 App Router(基于 React Server Components)彻底重构了数据获取机制。与旧版 Pages Router 中必须通过 getS
erverSideProps、getStaticProps 等约定式函数导出数据不同,App Router 鼓励在组件内部直接执行异步操作——只要组件是服务端组件(默认行为,且未显式标记 'use client'),其顶层 async function 就会在服务端渲染时自动等待 Promise 解析。
✅ 正确做法:将数据获取逻辑内联至页面组件中
以下是在 app/blah/page.tsx 中获取 GitHub 仓库数据的标准写法:
type Repo = {
name: string;
stargazers_count: number;
};
async function fetchRepo(): Promise {
const res = await fetch('https://api.github.com/repos/vercel/next.js', {
// 推荐显式设置 cache 策略(可选)
cache: 'no-store', // 确保每次请求都是新鲜的(SSR 行为)
// 或使用 'force-cache'(默认,可能触发 ISR 缓存)
});
if (!res.ok) {
throw new Error(`HTTP error! status: ${res.status}`);
}
return res.json();
}
export default async function Page() {
try {
const repo = await fetchRepo();
return Stargazers: {repo.stargazers_count};
} catch (error) {
console.error('Failed to fetch repo:', error);
return ⚠️ 数据加载失败,请稍后重试;
}
} ? 关键要点说明:
⚠️ 注意事项:
总之,App Router 的设计哲学是“简化抽象、贴近原生”,用标准的 async/await 替代魔法函数,让数据流更直观、可调试性更强。掌握这一范式,是高效使用 Next.js 最新版的关键一步。