0

0

如何在 Next.js 新 App Router 中实现服务端数据获取

心靈之曲

心靈之曲

发布时间:2026-01-02 13:03:28

|

191人浏览过

|

来源于php中文网

原创

如何在 Next.js 新 App Router 中实现服务端数据获取

next.js 13+ 的 app router 不再支持 `getserversideprops`,而是通过原生异步 server components 直接在组件内执行服务端逻辑,本文详解迁移方法、正确写法及关键注意事项。

在 Next.js 的新 App Router(即 app/ 目录结构)中,getServerSideProps、getStaticProps 和 getInitialProps 等传统数据获取函数已被完全移除。这是设计上的根本性转变:App Router 基于 React Server Components(RSC),允许你直接在默认导出的 async 页面组件中编写服务端代码,无需特殊钩子或约定函数。

✅ 正确做法:将数据获取逻辑直接写入页面组件内部,并声明组件为 async:

// app/blah/page.tsx
type Repo = {
  name: string;
  stargazers_count: number;
};

export default async function Page() {
  try {
    const res = await fetch('https://api.github.com/repos/vercel/next.js', {
      // 显式标记为服务端请求(避免被客户端重用)
      cache: 'no-store', // 或 'force-cache' / 'default'
      next: { revalidate: 60 }, // App Router 特有:每 60 秒重新验证(仅适用于 fetch + cache: 'force-cache')
    });

    if (!res.ok) {
      throw new Error(`HTTP ${res.status}: ${res.statusText}`);
    }

    const repo: Repo = await res.json();
    return 
Stargazers: {repo.stargazers_count}
; } catch (error) { console.error('Failed to fetch repo:', error); return
⚠️ 数据加载失败,请稍后重试
; } }

? 关键要点说明:

Android配合WebService访问远程数据库 中文WORD版
Android配合WebService访问远程数据库 中文WORD版

采用HttpClient向服务器端action请求数据,当然调用服务器端方法获取数据并不止这一种。WebService也可以为我们提供所需数据,那么什么是webService呢?,它是一种基于SAOP协议的远程调用标准,通过webservice可以将不同操作系统平台,不同语言,不同技术整合到一起。 实现Android与服务器端数据交互,我们在PC机器java客户端中,需要一些库,比如XFire,Axis2,CXF等等来支持访问WebService,但是这些库并不适合我们资源有限的android手机客户端,

下载
  • 组件必须是 async 函数:这是触发服务端渲染(SSR)的唯一方式;React 会自动在服务端执行该组件并序列化结果。
  • fetch 默认服务端执行:在 Server Component 中调用的 fetch 不会到达浏览器,且自动继承 Next.js 的缓存与重新验证能力(通过 cache 和 next.revalidate 配置)。
  • 无需 InferGetServerSidePropsType:类型推导直接通过 await fetch().then(res => res.json()) 或显式类型断言完成(如 const repo: Repo = await res.json())。
  • 错误处理需在组件内完成:无法依赖外部 HOC 或 getServerSideProps 的统一错误跳转,应使用 try/catch + 友好 UI 提示。
  • 禁止在 Client Components 中 fetch(无 use client 标记时):若组件顶部有 'use client',则 fetch 将在客户端执行(触发 hydration 后请求),失去 SSR 优势。

⚠️ 注意事项:

  • 不要尝试在 app/ 目录下定义 getServerSideProps —— 它会被完全忽略,且无任何警告。
  • 若需基于路由参数(如 app/[id]/page.tsx)动态获取数据,可直接解构 params(通过 async function Page({ params }: { params: { id: string } }))。
  • 如需在服务端获取数据后传递给 Client Component,须通过 props 显式传入(Client Component 接收的 props 必须可序列化)。

简言之:App Router 的数据获取 = async page component + 内联 fetch + 类型守卫 + 错误边界。拥抱这一范式,即可获得更简洁、更可控、更符合 React 演进方向的服务端渲染体验。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

403

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

528

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

307

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

74

2025.09.10

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

312

2023.08.02

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

520

2023.09.20

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

508

2023.06.20

js获取当前时间
js获取当前时间

JS全称JavaScript,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言;它是一种属于网络的高级脚本语言,主要用于Web,常用来为网页添加各式各样的动态功能。js怎么获取当前时间呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

241

2023.07.28

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

74

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 3.2万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 0.9万人学习

React核心原理新老生命周期精讲
React核心原理新老生命周期精讲

共12课时 | 1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号