Skip to content

Commit 7baa88f

Browse files
committed
feat: update next.js series one
1 parent f49961e commit 7baa88f

File tree

1 file changed

+252
-0
lines changed

1 file changed

+252
-0
lines changed
Lines changed: 252 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,252 @@
1+
---
2+
title: Next.js框架学习系列之一
3+
published: 2025-05-09
4+
description: ''
5+
image: ''
6+
tags: ['Next.js']
7+
category: 'React'
8+
draft: false
9+
lang: ''
10+
---
11+
12+
Next.js框架学习系列,从0到1了解基础概念及知识。
13+
14+
### Learn NextJS
15+
16+
**Chapter 1**
17+
18+
- 文件结构
19+
- `/app` 包含所有路由、组件和应用程序逻辑
20+
- `/app/lib` 包含您应用程序中使用的函数
21+
- `/app/ui`: 包含您应用程序的所有UI组件
22+
- `/public` 包含您应用程序的所有静态资源
23+
- `config files`: next.config.ts的配置文件
24+
25+
**Chapter 2 CSS Styling**
26+
27+
- Global Styles
28+
- global.css
29+
- Tailwind CSS框架,允许您直接在React代码中快速编写实用类来加速开发过程。
30+
- CSS Modules, 允许您通过自动创建唯一的类名来将CSS作用域限定到组件,无需担心样式冲突
31+
32+
- Tailwind 和 CSS 模块是 Next.js 应用程序中最常见的两种样式化方式.
33+
- `clsx` 轻松切换类名的库
34+
- 其他样式解决方案:
35+
- Sass允许您导入.css和.scss文件
36+
- CSS-in-JS库,如styled-jsx、styled-components和emotion
37+
38+
**Chapter 3 Optimizing Fonts and Images**
39+
40+
- 累积布局偏移是谷歌用来评估网站性能和用户体验的指标。
41+
- `next/font` nextjs会自动优化应用程序中的字帖。
42+
- 添加主字体
43+
- `/app/ui`创建`fonts.ts`管理新字体
44+
- 添加次要字体
45+
- `next/image`优化图像
46+
- 图片优化文档
47+
- 大小优化:为每个设备自动提供正确尺寸的图片,使用现代图片格式
48+
- 图像稳定性:当图像加载时自动防止布局偏移
49+
- 加速页面加载:仅当图像进入视口时加载图像,使用原生浏览器懒加载。
50+
- 资产灵活性:按需调整图像大小
51+
52+
**Chapter 4 Creating Layouts and Pages**
53+
54+
- 嵌套路由
55+
56+
**Chater 5 Navigating Between Pages**
57+
58+
- `next/link`
59+
- `usePathname()`
60+
- 为了改善导航体验,Next.js 会自动按路由段拆分您的应用程序。
61+
- 在生产环境中,每当 `<Link>`元件出现在浏览器的视口中时,Next.js 都会在后台**自动预取**链接路由的代码
62+
63+
**Chapter 6 Setting Up Your Database**
64+
65+
- 安装创建postgresql数据库
66+
67+
```
68+
// 安装
69+
brew install postgresql
70+
// 检查是否安装成功
71+
brew list postgresql
72+
// 初始化
73+
initdb /usr/local/var/postgres
74+
// 启动服务
75+
brew services start postgresql
76+
// 连接数据库
77+
psql postgres
78+
// 创建数据库
79+
CREATE DATABASE "nextjs-dashboard-postgres";
80+
// 修改用户密码
81+
ALTER USER wangshiquan PASSWORD 'yourpassword';
82+
// 连接数据库测试
83+
psql -h localhost -U wangshiquan -d nextjs-dashboard-postgres
84+
// 查看所有用户角色
85+
psql -l
86+
87+
```
88+
89+
90+
91+
- `.env.local` 配置数据库连接信息
92+
- 将运行种子脚本以使用初始数据集填充数据库,该脚本使用 **SQL** 创建表,并使用 `placeholder-data.ts` 文件中的数据在创建表后填充表。成功创建后`Database seeded successfully`
93+
94+
**Chapter 7 Fetching Data**
95+
96+
- API Layer:
97+
- 使用提供API的三方服务
98+
- 从客户端获取数据,服务器运行API层
99+
- 数据库查询
100+
- 创建API终端节点,需要编写逻辑与数据库交互
101+
- 在服务器上获取数据,跳过API层直接查询数据
102+
- Server Components
103+
- 服务器组件支持JavaScript Promises,为异步任务提供解决方案
104+
- 服务器组件在服务器上运行,将数据获取和逻辑保留在服务器上
105+
- 服务器组件运行在服务器上,可以跳过API直接查询数据库
106+
- 请求瀑布流
107+
- 希望在发出下一个请求之前满足条件。接口有依赖关系,需要依赖上一个接口的数据。
108+
- 并行数据获取
109+
- Promise.all() 或 Promise.allSettled() 同时启动所有Promise。
110+
111+
112+
113+
**Chapter 8 Static and Dynamic Rendering**
114+
115+
- 静态渲染:数据获取和渲染**在构建时(部署时)****重新验证数据时****在服务器上**进行。
116+
- 更快的网站。
117+
- 减少服务器负载。
118+
- SEO,对搜索引擎友好。
119+
- 静态渲染对于**没有数据****用户之间共享的**UI非常有用。例如静态博客文章或产品页面。
120+
- 动态渲染: 在**请求时**为每个用户渲染服务器上的内容。
121+
- 实时数据: 允许应用程序显示实时数据或经常更新数据。
122+
- 特定于用户的内容:提供个性化内容,根据用户交互更新数据。
123+
- 请求时间信息: 允许访问只能在请求时知道信息,如Cookie 或 URL 搜索参数。
124+
- 使用动态渲染时, **应用程序的速度仅与最慢的数据获取速度一样快**
125+
126+
127+
128+
**Chapter 9 Streaming**
129+
130+
- 流式传输: 一种数据传输技术,允许您将路由分解为更小的“块”,并在它们准备就绪时逐步将它们从服务器流式传输到客户端。
131+
- 通过流式传输,您可以防止慢速数据请求阻塞整个页面。
132+
- Next.js中,两种流失处理
133+
- 页面级别,使用`loading.tsx`文件创建`<Suspense>`
134+
- 组件级别,使用`<Suspense>`进行更精细控制。
135+
- Streaming a Component
136+
- Suspense 允许你推迟渲染应用程序的某些部分,直到满足某些条件(例如,加载数据)
137+
- 决定`Suspense`边界放置位置取决于:
138+
- 希望用户页面流式传输时如何体验页面
139+
- 要优先考虑的内容
140+
- 组件依赖于数据获取
141+
- 放置 Suspense 边界的位置会因您的应用程序而异。一般来说,最好将你的数据获取向下移动到需要它的组件,然后将这些组件包装在 Suspense 中。
142+
143+
**Chapter 10 Partial Prerendering**
144+
145+
- 安装`pnpm install next@canary`
146+
- 静态路由与动态路由
147+
- Next.js装那个,如果在路由中调用动态函数,则整个路由将变为动态。
148+
- 静态路由:组件不依赖于数据,也不针对用户进行个性化设置。
149+
- 动态路由:组件依赖于经常更改的数据,并且会针对用户进行个性化设置。
150+
- 部分渲染
151+
- 定义:允许您在同一路由中结合静态和动态渲染的优势。
152+
- 漏洞是动态内容在请求时异步加载的位置。
153+
- 部分预渲染工作原理
154+
- 原理:部分预渲染使用React的`Suspense`来推迟渲染应用程序的某些部分,直到满足某些条件(例如,数据被加载)。
155+
- 实现部分预渲染
156+
- `next.config.ts`中添加启用`ppr``experimental: {ppr: 'incremental'}`
157+
- incremental: 允许为特定路由采用PPR
158+
159+
160+
161+
**Chapter 11 Adding Search and Pagination**
162+
163+
- 使用URL搜索参数的好处
164+
- 可添加数钱和可共享URL
165+
- 服务端渲染
166+
- 分析和跟踪
167+
- 实现搜索功能
168+
- `useSearchParams`: 允许访问当前URL的参数。例如, URL `/dashboard/invoices?page=1&query=pending`的搜索参数将得到: `{page: '1', query: 'pending'}`
169+
- `usePathname`: 允许读取当前URL的路径名。例如,对于路由 `/dashboard/invoices,usePathname` 将返回 `'/dashboard/invoices'`
170+
- `useRouter`: 编程方式在客户端组件的路由之间启用导航。
171+
- 安装`use-debounce`, 处理防抖
172+
173+
174+
175+
**Chapter 12 Mutating Data**
176+
177+
- React Server Actions: React Server Actions 允许你直接在服务器上运行异步代码。Server Actions 的用武之地。它们包括加密闭包、严格输入检查、错误消息哈希、主机限制等功能,所有这些功能共同作用,可显著提高应用程序的安全性。
178+
- 使用React Server Actions改变数据
179+
- 与表单结合使用
180+
- 当通过 Server Action 提交表单时,您不仅可以使用该作来更改数据,还可以使用 `revalidatePath``revalidateTag` 等 API 重新验证关联的缓存。
181+
- 使用表单和Server Components
182+
183+
184+
185+
**Chapter 13 Handing Errors**
186+
187+
- try catch
188+
- error错误页面处理
189+
- next/navigation的notFound()
190+
191+
192+
193+
**Chapter 14 Improving Accessibility**
194+
195+
- 辅助功能:指设计和实现每个人都可以使用的Web应用程序,包括残障人士。涵盖许多领域,例如键盘导航、语义HTML、图像、颜色、视频等。参考[Learn Acessibility](https://web.dev/learn/accessibility/)
196+
- 使用插件:`eslint-plugin-jsx-a11y`, 帮助检查发现项目问题。terminal运行`pnpm lint`检查
197+
- 改进表单中的辅助功能
198+
- 语义HTML:使用语义元素(`<input>``<option>`等)而不是`<div>`.
199+
- 标签:包括`<label>``htmlFor`属性可确保每个表单都有一个描述性文本标签。
200+
- 焦点轮廓
201+
- 表单验证
202+
- 客户端验证
203+
- 服务端验证
204+
- 添加Aria标签
205+
206+
207+
208+
**Chapter 15 Adding Authentication**
209+
210+
- 身份认证和授权:身份验证会验证您的身份,而授权会确定您可以访问的内容。
211+
- NextAuth.js添加身份验证
212+
- `openssl rand -base64 32`生成测试密钥,添加到`.env``AUTH_SECRET`
213+
- 根目录创建`auth.config.ts`
214+
- 使用Next.js中间件保护路由,根目录创建`middleware.ts`
215+
- 密码哈希处理,创建`auth.ts`, 添加凭证
216+
- 实现登录功能
217+
- 实现注销功能
218+
219+
220+
221+
**Chapter 16 Adding MetaData**
222+
223+
- 元数据:提供有关网页的其他详细信息,对访问的用户不可见。
224+
225+
- 元数据在增强SEO方面发挥着重要作用,使其更易于搜索引擎和社交媒体平台访问和理解。
226+
227+
- 标题元数据`<title></title>`
228+
- 描述元数据`<meta name="description" content="A brief description of the page content." />`
229+
- 关键字元数据`<meta name="keywords" content="keyword1, keyword2, keyword3" />`
230+
- 开放图元数据
231+
232+
```
233+
<meta property="og:title" content="Title Here" />
234+
<meta property="og:description" content="Description Here" />
235+
<meta property="og:image" content="image_url_here" />
236+
```
237+
238+
- 网站图标元数据`<link rel="icon" href="path/to/favicon.ico" />`
239+
240+
- Next.js提供两种方法添加元数据
241+
- 基于配置: 导出静态元数据对象或动态generateMetadata函数到layout.js或page.js文件中
242+
- 基于文件
243+
- `favicon.ico``apple-icon.jpg``icon.jpg`:用于网站图标和图标
244+
- `opengraph-image.jpg``twitter-image.jpg`:用于社交媒体图像
245+
- `robots.txt`:提供搜索引擎爬网的说明
246+
- `sitemap.xml`:提供有关网站结构的信息
247+
248+
249+
【参考链接】[Learn Next.js](https://nextjs.org/learn/dashboard-app)
250+
251+
【DEMO下载】[dashboard-app](https://github.com/westenwang/nextjs-dashboard)
252+

0 commit comments

Comments
 (0)