SSR: server side render 服务端渲染。 是通过getServerSideProps(context:NextPageContext)实现的 尝试一下:
  1. import {GetServerSideProps, NextPage} from 'next';
  2. import UAParser from 'ua-parser-js';
  3. type Props = {
  4. browser: {
  5. name:string,
  6. version:string,
  7. major:string
  8. }
  9. }
  10. const index:NextPage<Props>=(props) =>{
  11. const {browser} = props
  12. return (
  13. <div>
  14. <h1>你的浏览器是 {browser.name}</h1>
  15. </div>
  16. )
  17. }
  18. export default index
  19. export const getServerSideProps:GetServerSideProps = async (context)=>{
  20. const ua = context.req.headers['user-agent']
  21. const result = new UAParser(ua).getResult()
  22. return {
  23. props:{
  24. browser: result.browser
  25. }
  26. }
  27. }

SSR - 图1

怎么证明这个页面是服务端渲染的:

看这个页面的源代码

SSR - 图2

页面内容是服务端之前返回的。

getServerSideProps

运行时机:

  • 无论是开发环境还是生产环境
  • 都是在每次请求到来之后运行getServerSideProps

对比getStaticPros

  • 开发环境,每次请求到来后运行,方便开发
  • 生产环境,build时运行一次

参数

  • context, 类型为 NextPageContext
  • context.req / context.res 可以获取请求和响应
  • 一般只需要用到context.req

总结

静态内容:直接输出HTML

动态内容:客户端渲染,通过AJAX请求,渲染成HTML

动态内容静态化:SSG,通过getStaticProps获取用户无关内容

用户相关动态内容静态化:

SSR,通过getServerSideProps获取请求

缺点:无法获取客户端信息,如浏览器窗口大小。