跳到主要内容

Nextjs

主要功能

特性描述
Routing在服务端组件顶层拥有基于路由的文件系统,
支持布局,嵌套路由,加载态,错误捕获等
Rendering分别对 CSR 和 SSR 组件进行 CSR 和 SSR 渲染。
对动态(流式)和静态渲染对优化
Data Fetching简化服务端组件对数据获取,扩展 fetch 用于请求记忆化,数据缓存与更新
Styling支持 css modules,tailwind, css-in-js
Optimizations图片字体和脚本优化提升体验
Typescript支持 typescript,并且有更好的类型检测和高效编译,支持 ts 插件

服务端组件

App Router vs Page Router

App Router 支持 React 最新功能,如服务端组件和流

Page Router 是 Nextjs 原先的路由,支持构建 SSR 应用并支持旧 Nextjs app

项目结构

渲染

客户端组件

客户端组件允许您编写可在请求时在客户端上呈现的交互式 UI。

在 Next.js 中,客户端渲染是可选的,这意味着您必须明确决定 React 应在客户端上渲染哪些组件。

客户端渲染的好处

交互性:客户端组件可以使用 state、effect 和事件侦听器,这意味着它们可以向用户提供即时反馈并更新 UI。 浏览器 API:客户端组件可以访问浏览器 API,例如地理位置或本地存储,允许您为特定用例构建 UI。

"use client"用于声明服务器和客户端组件模块之间的边界。

这意味着通过"use client",导入到其中的所有其他模块(包括子组件)都被视为客户端捆绑包的一部分。

// 存疑:layout 层记录状态,必须要标注 use client layout 层以及 layout 引用的外层组件(服务端组件),不用标注 use client

服务端组件中再引用了使用 state/effect 等的客户端组件,则具体到该客户端组件, 才标注 use client

备注

定义多个 use client 入口点:

您可以在 React 组件树中定义多个“使用客户端”入口点。这允许您将应用程序拆分为多个客户端包(或分支)。

但是,"use client"不需要在需要在客户端呈现的每个组件中进行定义。定义边界后,导入其中的所有子组件和模块都被视为客户端捆绑包的一部分。


客户端组件的渲染过程:

1.服务端返回初始 HTML 用于立即显示快速非交互式的路由 2.RSC 同时调和客户端和服务端组件树,并更新 DOM。 3.JavaScript 水合客户端组件并使其 UI 具有交互性。

客户端组件后续不需要服务器返回 html