Next.js实战项目 | 青训营笔记

293 阅读4分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 8 天

详细知识点介绍:

课程目标

所有应用分为B端用户、C端用户两种

例如 用于内网 内部用户使用 B端

CSR,SSR,SSG ——用于B端应用的三种渲染框架

CSR

服务端渲染,B端WEB应用开发模式,前后端分离。服务器压力相对更轻,渲染工作在客户端进行,服务器直接返回不加工的HTML用户在后续访问操作

SPA:单页面应用,它所需要的资源(HTML CSS JS等),在一次请求中就加载完成,不需刷新地动态加载,首屏时间更长

SSR

第一次将图片等信息都返回了

代码耦合度高,且模板语言中混杂编程语言对于一些复杂的功能,维护起来很痛苦

这种模板下Java、PHP负责渲染的逻辑,而前端只负责UI和交互

同构SSR

前后端一体化,一套React代码在服务器运行一遍,到达浏览器又运行一遍,前端后端都要参与渲染,而且首次渲染出的HTML要一样

BFF:Backened For Frontend,服务于其阿奴单应用的后端

image.png

SSG

简单来说,相对SSR,所需要的机子少

静态站点生成(Static Site Generation),在构建的时候直接把结果页面输出html到磁盘,每次访问直接把html返回给客户端,相当于一个静态资源

image.png

SSR,SSG的优势

  • 利于SEO

image.png

  • 更短的首屏时间

image.png

什么是Next.js

  • SSR的实现 基于React提供的相关服务器渲染API实现,整个过程实现比较哦繁琐重复,从零实现对新上手的同学很不友好

image.png

仓库地址:github.com/czm12904337…

脱水 与 注水

Next.js

使用Next.js可以不需要太关注多余的部分

image.png

初始化

npx create-next-app@latest --typescript

(代码)Next.js客户端开发

CMS仓库地址[github.com/czm12904337…] Demo仓库地址[github.com/czm12904337…]

Nextjs初始化

image.png

将API分开

image.png

getInitialProps

image.png

getServerSideProps

image.png

getStaticProps

image.png

CSS Modules

image.png

Next.js支持使用文件命名约定的CSS模块。[name].module.css

Layout

image.png

通过在入口文件导入layout,可以实现每个页面公共的页眉页尾

image.png

文件式路由

image.png Next.js有一个机遇页面概念的机遇文件系统的路由器。当一个文件被添加到pages目录中时,它会自动作为一个路径可用

BFF层的文件式路由

image.png

路由跳转

走路由跳转比较好 image.png

除了这些外,还可以使用原生方法跳转,不过原生的方法不会进行Diff比对渲染,性能上Nextjs提供的路由跳转会更好

header的修改

image.png

可用于修改TDK(title, description, keywords)

多媒体适配 —— CSS适配

适配:PC、手机、ipad

rem 灵活换算

image.png

多媒体适配 —— JS适配

image.png

大图优化 ——webp

image.png

(代码)服务端开发

BFF层开发

image.png 和Express等开发类似,区别是并没有参数可以直接区别请求类型

调试方法

image.png 两种开发模式:1. debug 2. 终端 浏览器控制台上的绿色标识:原本的是 客户端的控制台,点击后出现的是服务器控制台

Strapi - headless CMS

数据管理平台 strapi

仓库:[github.com/strapi/stra…] 初始化:[npx create-strapi-app my-project --quickstart]

一个接口的生成有以下几个过程:

  1. content-type builder 编辑结构体
  2. content manager 配置数据源,并且发布
  3. settings roles里选择对应角色并勾选要发布的接口类型
  4. 如果涉及嵌套,在接口后加上populate=deep参数 (npm install strapi-plugin-populate-deep--save), 没安装加参数populate=*,但只能嵌套一层

核心功能讲解

首页功能实现

  1. 页面 & 动画 & 多媒体适配
  2. BFF
  3. Strapi

文章页实现

image.png

主题化功能实现

  1. 基础样式和背景的抽离
  2. 主题化context全局注入
  3. 从注入数据中取出theme和setTheme
  4. 多进程间的主题同步

思考题:http://localhost:3000 ,和 http://127.0.0.1:3000 主题可以共享吗

答:不可以。最底层是Local storage控制的,而localhost与127.0.0.1属于不同级,所以主题不能共享

引用参考:

PPT: bytedance.feishu.cn/file/boxcnp…