【Nuxt】nuxt的生命周期

本文详细阐述了Nuxt.js的生命周期,包括服务器端和客户端的执行过程。在服务器端,涉及初始化、nuxtServerInit、Route Middleware、validate、asyncData等功能。客户端则从接收HTML开始,执行客户端插件,Vue处理HTML并进行响应式处理,最后执行Vue生命周期钩子。总结了服务器端的初始化、路由中间件、动态参数验证和数据获取等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Nuxt生命周期

Server端(这部分的生命周期都在服务端执行)

初始化阶段

  • nuxt start服务启动
  • nuxt generate生成阶段
  • nuxt hooks
  • Server site Nuxt plugins,按照nuxt.config.js文件中定义的顺序,执行nuxt在服务器端的一些插件

以上都是nuxt的初始化过程 

  • nuxtServerInit(如果使用了Vuex,这就是在服务端第一个被调用的生命周期钩子)

    这个函数的第一个参数为Vuex context,第二个参数为Nuxt context

    1、执行一些Vuex中定义的在服务端执行的一些actions,用于对store进行预设

    2、这个函数只能被定义在store/index.js文件下

  • Route Middleware阶段,执行路由相关中间件

    会按照顺序执行以下的Global middleware、Layout middleware、Route middleware,

    • Global middleware:在nuxt.config.js中定义的中间件被称为全局中间件,可以在这里进行全局的路由守卫
    • Layout middleware:在layouts中定义的中间件
    • page middware:在pages中定义的中间件
  • validate阶段:这个函数在page页面被渲染前执行,可以通过context拿到路由的参数信息,可以用于判断路由动态参数是否合法。这个函数一定要有返回值且必须返回true或false

  • 执行asyncData(只能用在page中)、fentch等函数(在page中会在middleware阶段调用,在component中会在created中调用,因为Component会等到父级Component的created之后才会被渲染

接下来Nuxt会开始渲染html代码

  • Vue组件开始初始化,执行Vue生命周期的两个钩子(只支持beforeCreate和creatd
  • Component内的fetch函数
  • 序列化状态Serialization of state,这里会调用一个nuxt的hook,render:routeContext
  • HTML开始渲染,调用nuxt的honk,render:route
  • HTML渲染完成并且发向浏览器后,调用render:routeDone

然后生成HTML文件

  • 生成之前,调用一个nuxt的hook,generate:before
  • 先生成静态页面generate:page(HTML可编辑),再生成路由,generate:routeCreated(路由生成完毕)
  • 整个HTML文件生成完成generate:done

Client端(这部分生命周期在浏览器端执行)

  • 收到HTML,并且加载css、JavaScript等资源
  • client-site plugins,按照nuxt.config.js文件中定义的顺序,执行nuxt在浏览器端的一些插件(页面跳转时,是从这里开始的,不会再去请求页面)
  • Vue处理浏览器接收的HTML,比如:数据响应式处理
  • 执行middleware,Global middleware、Layout middleware、Route middleware
  • 等待asyncData执行结果
  • 执行Vue生命周期钩子

总结

服务器端:

  • nuxt初始化
  • nuxtServerInit,用于对Vuex store进行预设
  • Rotue Middleware,执行路由中间件,可以进行路由守卫
  • Validate,验证路由动态参数,必须返回布尔值
  • asyncData和fetch等函数执行
  • Vue组件的beforeCreate,created
  • 渲染HTML并且发送给客户端

客户端:

  • 收到HTML
  • 执行中间件,和服务端的中间件不同
  • Vue处理HTML,添加响应式
  • 等待asyncData数据,fullfilled后开始Vue的渲染流程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值