You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在NextJS中能否用getServerSideProps返回的服务端props初始化动态状态?

你的实现完全符合Next.js Pages Router下SSR场景的标准开发规范,是该场景下的最优写法,比客户端useEffect拉取数据的方案更合理。

写法合理性说明

  • getServerSideProps是Next.js官方提供的专门用于服务端渲染场景的数据获取API,你通过它在服务端提前拉取待办数据、注入到组件props的逻辑完全符合官方规范,服务端渲染返回的HTML会直接携带初始待办列表内容,首屏加载速度更快,也更利于SEO。
  • 用props直接初始化state的逻辑也没有问题,不需要额外在客户端用useEffect二次拉取数据,纯React项目里的useEffect拉取逻辑是CSR场景下的实现方式,放到SSR场景下反而会导致首屏先出现空列表、等客户端JS加载完成才渲染数据的问题,浪费了SSR的能力。

可优化的细节(针对TypeScript规范)

你可以补充类型定义,替换代码中的any类型,提升类型安全性:

// 定义Todo数据类型
interface Todo {
  id: number;
  title: string;
  completed: boolean;
  userId: number;
}

// 定义页面props类型
interface HomeProps {
  todos: Todo[]
}

另外你当前新增待办的逻辑没有生成唯一id,可能会触发React列表key重复的警告,可以调整新增逻辑:

setTodoState((prev: Todo[]) => [...prev, { 
  id: Date.now(), 
  title: newTodo,
  completed: false,
  userId: 1
}])

如果需要持久化新增的待办数据,你可以在onSubmit回调中补充服务端接口调用逻辑,否则刷新页面后新增的待办会丢失。
如果后续你升级到Next.js 13+的App Router,SSR数据获取的写法会切换为服务端组件直接异步拉取数据,但你当前基于Pages Router的写法是完全符合规范的。

内容的提问来源于stack exchange,提问作者Shadee Merhi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 16:48:03