当前位置: 首页 > ops >正文

Next.js框架学习系列之一

Next.js框架学习系列,从0到1了解基础概念及知识。

Learn NextJS

Chapter 1

  • 文件结构
    • /app 包含所有路由、组件和应用程序逻辑
    • /app/lib 包含您应用程序中使用的函数
    • /app/ui: 包含您应用程序的所有UI组件
    • /public 包含您应用程序的所有静态资源
    • config files: next.config.ts的配置文件

Chapter 2 CSS Styling

  • Global Styles

    • global.css
  • Tailwind CSS框架,允许您直接在React代码中快速编写实用类来加速开发过程。

  • CSS Modules, 允许您通过自动创建唯一的类名来将CSS作用域限定到组件,无需担心样式冲突

  • Tailwind 和 CSS 模块是 Next.js 应用程序中最常见的两种样式化方式.

  • clsx 轻松切换类名的库

  • 其他样式解决方案:

    • Sass允许您导入.css和.scss文件
    • CSS-in-JS库,如styled-jsx、styled-components和emotion

Chapter 3 Optimizing Fonts and Images

  • 累积布局偏移是谷歌用来评估网站性能和用户体验的指标。
  • next/font nextjs会自动优化应用程序中的字体。
  • 添加主字体
    • /app/ui创建fonts.ts管理新字体
  • 添加次要字体
  • next/image优化图像
  • 图片优化文档
    • 大小优化:为每个设备自动提供正确尺寸的图片,使用现代图片格式
    • 图像稳定性:当图像加载时自动防止布局偏移
    • 加速页面加载:仅当图像进入视口时加载图像,使用原生浏览器懒加载。
    • 资产灵活性:按需调整图像大小

Chapter 4 Creating Layouts and Pages

  • 嵌套路由

Chater 5 Navigating Between Pages

  • next/link
  • usePathname()
  • 为了改善导航体验,Next.js 会自动按路由段拆分您的应用程序。
  • 在生产环境中,每当 <Link>元件出现在浏览器的视口中时,Next.js 都会在后台自动预取链接路由的代码

Chapter 6 Setting Up Your Database

  • 安装创建postgresql数据库
// 安装
brew install postgresql
// 检查是否安装成功
brew list postgresql
// 初始化initdb /usr/local/var/postgres
// 启动服务
brew services start postgresql
// 连接数据库
psql postgres
// 创建数据库
CREATE DATABASE "nextjs-dashboard-postgres";
// 修改用户密码
ALTER USER wangshiquan PASSWORD 'yourpassword';
// 连接数据库测试
psql -h localhost -U wangshiquan -d nextjs-dashboard-postgres
// 查看所有用户角色
psql -l
  • .env.local 配置数据库连接信息
  • 将运行种子脚本以使用初始数据集填充数据库,该脚本使用 SQL 创建表,并使用 placeholder-data.ts 文件中的数据在创建表后填充表。成功创建后Database seeded successfully

Chapter 7 Fetching Data

  • API Layer:
    • 使用提供API的三方服务
    • 从客户端获取数据,服务器运行API层
  • 数据库查询
    • 创建API终端节点,需要编写逻辑与数据库交互
    • 在服务器上获取数据,跳过API层直接查询数据
  • Server Components
    • 服务器组件支持JavaScript Promises,为异步任务提供解决方案
    • 服务器组件在服务器上运行,将数据获取和逻辑保留在服务器上
    • 服务器组件运行在服务器上,可以跳过API直接查询数据库
  • 请求瀑布流
    • 希望在发出下一个请求之前满足条件。接口有依赖关系,需要依赖上一个接口的数据。
  • 并行数据获取
    • Promise.all() 或 Promise.allSettled() 同时启动所有Promise。

Chapter 8 Static and Dynamic Rendering

  • 静态渲染:数据获取和渲染在构建时(部署时)重新验证数据时在服务器上进行。
    • 更快的网站。
    • 减少服务器负载。
    • SEO,对搜索引擎友好。
    • 静态渲染对于没有数据用户之间共享的UI非常有用。例如静态博客文章或产品页面。
  • 动态渲染: 在请求时为每个用户渲染服务器上的内容。
    • 实时数据: 允许应用程序显示实时数据或经常更新数据。
    • 特定于用户的内容:提供个性化内容,根据用户交互更新数据。
    • 请求时间信息: 允许访问只能在请求时知道信息,如Cookie 或 URL 搜索参数。
    • 使用动态渲染时, 应用程序的速度仅与最慢的数据获取速度一样快

Chapter 9 Streaming

  • 流式传输: 一种数据传输技术,允许您将路由分解为更小的“块”,并在它们准备就绪时逐步将它们从服务器流式传输到客户端。
  • 通过流式传输,您可以防止慢速数据请求阻塞整个页面。
  • Next.js中,两种流失处理
    • 页面级别,使用loading.tsx文件创建<Suspense>
    • 组件级别,使用<Suspense>进行更精细控制。
  • Streaming a Component
    • Suspense 允许你推迟渲染应用程序的某些部分,直到满足某些条件(例如,加载数据)
    • 决定Suspense边界放置位置取决于:
      • 希望用户页面流式传输时如何体验页面
      • 要优先考虑的内容
      • 组件依赖于数据获取
      • 放置 Suspense 边界的位置会因您的应用程序而异。一般来说,最好将你的数据获取向下移动到需要它的组件,然后将这些组件包装在 Suspense 中。

Chapter 10 Partial Prerendering

  • 安装pnpm install next@canary
  • 静态路由与动态路由
    • Next.js装那个,如果在路由中调用动态函数,则整个路由将变为动态。
    • 静态路由:组件不依赖于数据,也不针对用户进行个性化设置。
    • 动态路由:组件依赖于经常更改的数据,并且会针对用户进行个性化设置。
  • 部分渲染
    • 定义:允许您在同一路由中结合静态和动态渲染的优势。
    • 漏洞是动态内容在请求时异步加载的位置。
  • 部分预渲染工作原理
    • 原理:部分预渲染使用React的Suspense来推迟渲染应用程序的某些部分,直到满足某些条件(例如,数据被加载)。
  • 实现部分预渲染
    • next.config.ts中添加启用pprexperimental: {ppr: 'incremental'}
    • incremental: 允许为特定路由采用PPR

Chapter 11 Adding Search and Pagination

  • 使用URL搜索参数的好处
    • 可添加数钱和可共享URL
    • 服务端渲染
    • 分析和跟踪
  • 实现搜索功能
    • useSearchParams: 允许访问当前URL的参数。例如, URL /dashboard/invoices?page=1&query=pending的搜索参数将得到: {page: '1', query: 'pending'}
    • usePathname: 允许读取当前URL的路径名。例如,对于路由 /dashboard/invoices,usePathname 将返回 '/dashboard/invoices'
    • useRouter: 编程方式在客户端组件的路由之间启用导航。
  • 安装use-debounce, 处理防抖

Chapter 12 Mutating Data

  • React Server Actions: React Server Actions 允许你直接在服务器上运行异步代码。Server Actions 的用武之地。它们包括加密闭包、严格输入检查、错误消息哈希、主机限制等功能,所有这些功能共同作用,可显著提高应用程序的安全性。
  • 使用React Server Actions改变数据
    • 与表单结合使用
    • 当通过 Server Action 提交表单时,您不仅可以使用该作来更改数据,还可以使用 revalidatePathrevalidateTag 等 API 重新验证关联的缓存。
  • 使用表单和Server Components

Chapter 13 Handing Errors

  • try catch
  • error错误页面处理
  • next/navigation的notFound()

Chapter 14 Improving Accessibility

  • 辅助功能:指设计和实现每个人都可以使用的Web应用程序,包括残障人士。涵盖许多领域,例如键盘导航、语义HTML、图像、颜色、视频等。参考Learn Acessibility
  • 使用插件:eslint-plugin-jsx-a11y, 帮助检查发现项目问题。terminal运行pnpm lint检查
  • 改进表单中的辅助功能
    • 语义HTML:使用语义元素(<input><option>等)而不是<div>.
    • 标签:包括<label>htmlFor属性可确保每个表单都有一个描述性文本标签。
    • 焦点轮廓
  • 表单验证
  • 客户端验证
  • 服务端验证
  • 添加Aria标签

Chapter 15 Adding Authentication

  • 身份认证和授权:身份验证会验证您的身份,而授权会确定您可以访问的内容。
  • NextAuth.js添加身份验证
    • openssl rand -base64 32生成测试密钥,添加到.envAUTH_SECRET
    • 根目录创建auth.config.ts
    • 使用Next.js中间件保护路由,根目录创建middleware.ts
    • 密码哈希处理,创建auth.ts, 添加凭证
    • 实现登录功能
    • 实现注销功能

Chapter 16 Adding MetaData

  • 元数据:提供有关网页的其他详细信息,对访问的用户不可见。

  • 元数据在增强SEO方面发挥着重要作用,使其更易于搜索引擎和社交媒体平台访问和理解。

    • 标题元数据<title></title>
    • 描述元数据<meta name="description" content="A brief description of the page content." />
    • 关键字元数据<meta name="keywords" content="keyword1, keyword2, keyword3" />
    • 开放图元数据
    <meta property="og:title" content="Title Here" />
    <meta property="og:description" content="Description Here" />
    <meta property="og:image" content="image_url_here" />
    
    • 网站图标元数据<link rel="icon" href="path/to/favicon.ico" />
  • Next.js提供两种方法添加元数据

    • 基于配置: 导出静态元数据对象或动态generateMetadata函数到layout.js或page.js文件中
    • 基于文件
      • favicon.icoapple-icon.jpgicon.jpg:用于网站图标和图标
      • opengraph-image.jpgtwitter-image.jpg:用于社交媒体图像
      • robots.txt:提供搜索引擎爬网的说明
      • sitemap.xml:提供有关网站结构的信息

【参考链接】Learn Next.js

【DEMO下载】dashboard-app

http://www.xdnf.cn/news/5387.html

相关文章:

  • Vue 中el和data的两种写法
  • 基于神经网络的无源雷达测向系统仿真实现
  • Transformer KV缓存优化(MHA、MQA、GQA、MLA,参考:DeepSeek-V2)
  • GitHub 趋势日报 (2025年05月10日)
  • 【音视频工具】MP4BOX使用
  • GO语言内存管理结构
  • 远程服务器pycharm运行tensorboard显示训练轮次图
  • 【多模态】IMAGEBIND论文阅读
  • 数据分析基础:需要掌握的入门知识
  • python 实现sha加密
  • 数字电子技术基础(五十七)——边沿触发器
  • 用统计零花钱的例子解释:Shuffle 是啥?
  • 【锂电池剩余寿命预测】SVM支持向量机锂电池剩余寿命预测(Pytorch完整源码和数据)
  • 2025-05-11 项目绩效域记忆逻辑管理
  • 保姆级教程|YOLO11改进】【卷积篇】【4】使用RFAConv感受野注意力卷积,重塑空间特征提取,助力高效提点
  • httpclient请求出现403
  • 接口在函数参数和对象类型中的应用
  • C——猜数字游戏
  • Linux——MySQL内置函数与复合查询
  • 【SaaS灾难恢复】跨云备份与快速重建机制
  • FastAPI实现JWT校验的完整指南
  • C++笔记6:数字字面量后缀和前缀总结
  • YOLO-World:基于YOLOv8的开放词汇目标检测
  • 2050年的世界是怎样的?
  • Windows系统更新一键禁用:WindowsUpdateBlocker轻量级工具推荐
  • 【高数上册笔记篇02】:数列与函数极限
  • vue中理解MVVM
  • 12、电子电路设计与PCB布局组件 (概念) - /设计与仿真组件/pcb-layout-tool
  • C语言和Python在负数取余运算(%)上的差异
  • AJAX原理