nextjs | 青训营笔记

145 阅读3分钟

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

之前在实习时写过一段时间的nextjs项目,但也仅仅是停留在一些很简单的部分,比如文件路由、动态路由等。在青训营中,我有了重新学习nextjs的机会,甚至是由大佬带着学习的。在此做一些笔记。

CSR, SSR, SSG

CSR

CSR指的是客户端渲染,常用于B(business,面向企业用户,如内部应用)。服务器压力比较小,在客户端进行渲染。处理带有较多用户交互数据时比较适合,动态加载,首屏时间会很长。

SSR

服务端渲染,之前出现的php等就属于服务端渲染。而由于在模版中夹杂了很多的服务端语言,代码耦合度很高,不利于长期维护。

现在出现了新的SSR,同构SSR。前后端一体化,模版与逻辑在同一项目内但维护在不同目录下,方便维护。一套react代码在浏览器和服务器都跑一遍,首次渲染的html保持一致。

BFF,服务于前端的后端,分开前后端,处理部分数据,提高后端服务可复用性。

SSG

静态站点生成,就是在构建时直接把html界面输出到磁盘,收到访问请求时将它传给用户。(类似早期访问静态页面)依赖于CDN服务,提高访问速度。只能传递静态页面,没什么交互。

Next.js

课上利用React提供的服务端渲染的api简单实现了一下同构ssr,明显看出整个过程是复杂且重复的,对新人很不友好。而nextjs的出现便解决了这个重复且复杂的问题,它集成并优化了这一过程,让人更轻松地掌握前后端一体化。

Next.js客户端开发

数据注入的几种方式,

getInitialProps

比较复杂的一个函数,首次渲染进行服务器端渲染,路由转跳使用客户端路由。用的地方不多,一般使用后面两种函数实现大部分功能。

getServerSideProps

函数内逻辑始终在服务端执行,通常用的地方很多。

getStaticProps

用于SSG,也是在服务端运行。

其他实用的地方

  • CSS Modules 支持使用文件名约定的CSS模块。[name].module.css
  • Layout 入口文件导入layout来实现不同页面公共的页眉页脚。
  • 文件式路由 nextjs有着基于文件系统的路由,在pages目录下的文件会自动成为一个路径。
  • BFF层文件路由 api访问时的路由类似pages,也是基于文件系统的
  • 路由转跳 next提供的Link转跳性能会更优
  • header修改 可用于修改 title, description, keywords
  • 多媒体适配、js适配、大图webp适配等先进技术

CMS系统

个人理解为一个面向非开发人员的数据库管理系统,能够提供非常直观简化的操作界面,并提供了自动生成路由等方便开发配置的功能。当然这里只是介绍了一个相当不错的一个项目,strapi。在大项目中应该会很方便配置使用。