这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天
基本概念
-
CSR
客户端渲染 Client-Side Rendering
目前常见B端Web应用开发模式
前后端分离,服务器压力较轻,渲染主要在客户端进行
-
SSR
服务端渲染 Server-Side Rendering
早期的 JSP 和 PHP,前端仅负责 UI 和交互
-
BFF Backend For Frontend
同构 SSR
-
SSG
静态站点生成 Static Site Generation
构建时直接生成 HTML 文件,每次访问时直接返回 HTML 给客户端
-
SSR、SSG优势
- 利于 SEO
- 更短的首屏时间
原生实现 SSR
React 原生服务器渲染 API
rendertostring
hydrateRoot
模板渲染的同构
路由同构
Head 标签修改
脱水注水
性能优化
Next.js 客户端
-
初始化
npx create-next-app@latest --typescriptnext.config.jsnextjs配置文件 -
数据获取
getInitialProps(已弃用)
getServerSideProps 服务端渲染
指定页面渲染模式是 SSR
getStaticProps 静态站点生成(构建时执行)
指定页面渲染模式是 SSG
getStaticPaths 静态站点生成(构建时执行)
涉及动态路由时使用
-
CSS modules
原生支持 CSS modules
指定 CSS 文件为
*.module.css启用 -
文件式路由
pages文件夹内的文件自动被视为路由
pages/api文件夹内文件自动被视为服务器端接口
-
路由跳转
link(next/link)
useRouter(next/router)
-
header 设置
Head(next/head)
-
CSS 适配
利用 CSS 变量和媒体查询实现
@media screen and (max-width: 1000px)或使用 JS 实现组件适配
-
大图优化
使用 webp 图片
可以使用在线转换器
Next.js 服务端开发
-
接口开发
/page/api文件夹下 -
调试 debug
-
CMS
Content Manage System
strapi
Content-Type Builder 构建结构体
Content Manger 配置数据源并发布
Settings Roles 选择角色并选择接口类型
(嵌套需添加 populate=deep 参数 使用 strapi-plugin-populate-deep 插件)
项目开发
-
首页
- 页面&多媒体&动画适配
- BFF
- strapi
-
文章详情页
-
页面&多媒体&动画适配
-
BFF
-
strapi
-
多媒体格式转换
- markdown 转 html
showdown - html转dom
dangerouslySetInnerHTML - 公共样式定义
- markdown 转 html
-
-
主题化
- 基础样式和背景抽离
- 主题化context注入
- 取出theme和setTheme
- 多进程间的主题同步(监听storage事件,设置storage)
const showdown = require('showdown')
const converter = new showdown.Converter()
const text = '# hello, markdown!'
const html = converter.makeHtml(text)
localhost与127.0.0.1跨域