注册 登录

清河洛

vue中的生命周期函数

qingheluo2023-08-01清河洛287
每个Vue组件实例在创建时都需要经历一系列的初始化步骤,如设置好数据侦听,编译模板,挂载实例到DOM,以及在数据改变时更新DOM等等在此过程中会运行被称为生命周期钩子的函数,让开发者有机会在特定阶段运行自己的代码生命周期函数统一使用驼峰式命名规则,即首单词小写,后面每个单词的首字母大写选项式API中生命周期函数名称没有on,组合式API在生命周期函数前面加上on,如:mounted(){} 和 onMounted(){} beforeUpdate(){} 和 onBeforeUpdate(){} 一个组件按照时间顺序依次经历的生命周期:beforeCreate():在实例初始化完成、pr...

每个Vue组件实例在创建时都需要经历一系列的初始化步骤,如设置好数据侦听,编译模板,挂载实例到DOM,以及在数据改变时更新DOM等等

在此过程中会运行被称为生命周期钩子的函数,让开发者有机会在特定阶段运行自己的代码

生命周期函数统一使用驼峰式命名规则,即首单词小写,后面每个单词的首字母大写

选项式API中生命周期函数名称没有on,组合式API在生命周期函数前面加上on,如:

mounted(){} 和 onMounted(){}
beforeUpdate(){} 和 onBeforeUpdate(){}

一个组件按照时间顺序依次经历的生命周期:

beforeCreate():在实例初始化完成、props解析之后、data() 和computed等选项处理之前调用

created():在组件实例处理完所有与状态相关的选项后调用

当这个钩子被调用时,以下内容已经设置完成:响应式数据、计算属性、方法和侦听器
此时挂载阶段还未开始,因此 $el 属性仍不可用

以上两个生命周期函数在选项式API中仍然可以使用,但是在组合式API中已经由setup()替代

onBeforeMount():在组件被挂载之前调用,在SSR时不调用

当这个钩子被调用时,组件已经完成了其响应式状态的设置,但还没有创建DOM节点。它即将首次执行DOM渲染过程

onMounted():在组件被挂载之后调用,在SSR时不调用

组件在以下情况下被视为已挂载:
    所有同步子组件都已经被挂载。(不包含异步组件或 <Suspense>树内的组件)
    其自身的DOM树已经创建完成并插入了父容器中
    通常用于访问组件所渲染的DOM树或在服务端渲染应用中确保DOM相关代码仅在客户端被调用

onBeforeUpdate():在组件即将因为一个响应式状态变更而更新其DOM树之前调用,在SSR时不调用

这个钩子可以用来在Vue更新DOM之前访问DOM状态
在这个钩子中更改状态也是安全的

onUpdated():在组件因为一个响应式状态变更而更新其 DOM 树之后调用,在SSR时不调用

父组件的更新钩子将在其子组件的更新钩子之后调用
这个钩子会在组件的任意DOM更新后被调用,这些更新可能是由不同的状态变更导致的
如果需要在某个特定的状态更改后访问更新后的DOM,请使用nextTick()作为替代

onBeforeUnmount():在一个组件实例被卸载之前调用,在SSR时不调用

当这个钩子被调用时,组件实例依然还保有全部的功能

onUnmounted():在一个组件实例被卸载之后调用,在SSR时不调用

一个组件在以下情况下被视为已卸载:
    其所有子组件都已经被卸载。
    所有相关的响应式作用都已经停止
    可以在这个钩子中手动清理一些副作用,如计时器、DOM事件监听器或者与服务器的连接

onErrorCaptured():在捕获了后代组件传递的错误时调用

错误可以从以下几个来源中捕获:
    组件渲染
    事件处理器
    生命周期钩子
    setup() 函数
    侦听器
    自定义指令钩子
    过渡钩子
    这个钩子带有三个实参:错误对象、触发该错误的组件实例,以及一个说明错误来源类型的信息字符串
    不要让错误状态渲染为导致本次错误的内容,否则组件就会进入无限的渲染循环中

错误传递规则
    默认情况下,所有的错误都会被发送到应用级的 app.config.errorHandler (前提是这个函数已经定义),这样这些错误都能在一个统一的地方报告给分析服务
    如果组件的继承链或组件链上存在多个errorCaptured钩子,对于同一个错误,这些钩子会被按从底至上的顺序一一调用,,类似于原生 DOM 事件的冒泡机制。
    如果errorCaptured钩子本身抛出了一个错误,那么这个错误和原来捕获到的错误都将被发送到app.config.errorHandler
    errorCaptured钩子可以通过返回false来阻止错误继续向上传递。即表示“这个错误已经被处理了,应当被忽略”

onRenderTracked():在一个响应式依赖被组件的渲染作用追踪后调用,仅在开发模式下可用,且在SSR时不调用

onRenderTriggered():在一个响应式依赖被组件触发了重新渲染之后调用,仅在开发模式下可用,且在SSR时不调用

onActivated():若组件实例是<KeepAlive>缓存树的一部分,当组件被插入到DOM中时调用,在SSR时不调用

onDeactivated():若组件实例是<KeepAlive>缓存树的一部分,当组件从DOM中被移除时调用,在SSR时不调用

onServerPrefetch():仅SSR,当组件实例在服务器上被渲染之前要完成的异步函数

如果这个钩子返回了一个 Promise,服务端渲染会在渲染该组件前等待该 Promise 完成
这个钩子仅会在服务端渲染中执行,可以用于执行一些仅在服务端才有的数据抓取过程

vue生命周期.png



网址导航