百科狗-知识改变命运!
--

生命周期钩子 - onBeforeMount()、onMounted()、 onBeforeUpdate()、 onUpdated() - vue 基础

梵高1年前 (2023-11-21)阅读数 24#技术干货
文章标签钩子

生命周期钩子

每个 Vue 组件实例在创建时都需要经历一系列的初始化步骤,比如设置好数据侦听,编译模板,挂载实例到 DOM 以及数据改变时更新 DOM。在此过程中,它也会运行称为生命周期钩子的函数,让开发者有机会在特定阶段添加自己的代码。

生命周期图示



组合式 API

组合式 API 生命周期钩子:

  • onBeforeMount():在组件被挂载之前,调用。当这个钩子被调用时,组件已经完成了其响应式状态的设置,但还没有创建 DOM 节点。它即将首次执行 DOM 渲染过程。这个钩子在服务器端渲染期间不会被调用。
  • onMounted():在组件挂载完成后,调用。组件在以下情况下被视为已挂载:其所有同步子组件都已经被挂载(不包含异步组件或的组件)。其自身的 DOM 树已经创建完成并插入了父容器中。注意仅当根容器在文档中时,才可以保证组件 DOM 树也在文档中。这个钩子在服务器端渲染期间不会被调用。
  • onBeforeUpdate():由于响应式状态更改,在组件即将更新其 DOM 树之前,调用。这个钩子可以用来在 Vue 更新 DOM 之前访问 DOM 状态。在这个钩子中更改状态也是安全的。这个钩子在服务器端渲染期间不会被调用。
  • onUpdated():由于响应式状态更改,在组件更新其 DOM 树之后,调用。父组件的更新钩子将在其子组件的更新钩子之后调用。这个钩子会在组件的任意 DOM 更新后被调用,这些更新可能是由不同的状态变更导致的。
  • onBeforeUnmount():在卸载组件实例之前,调用。当这个钩子被调用时,组件实例依然还保有全部的功能。这个钩子在服务器端渲染期间不会被调用。
  • onUnmounted():在卸载组件实例之后,调用。一个组件在以下情况下被视为已卸载:其所有子组件都已经被卸载。所有相关的响应式作用(渲染作用以及 setup()时创建的计算属性和侦听器)都已经停止。可以在这个钩子中手动清理一些副作用,例如计时器、DOM 事件监听器或者与服务器的连接。这个钩子在服务器端渲染期间不会被调用。
  • onActivated():若组件实例是缓存树的一部分,当组件被插入到 DOM 中时,调用。这个钩子在服务器端渲染期间不会被调用。
  • onDeactivated():若组件实例是缓存树的一部分,当组件从 DOM 中被移除时,调用。这个钩子在服务器端渲染期间不会被调用。
  • onServerPrefetch():在组件实例在服务器上被渲染之前,调用。如果这个钩子返回了一个 Promise,服务端渲染会在渲染该组件前等待该 Promise 完成。这个钩子仅会在服务端渲染中执行,可以用于执行一些仅存在于服务端的数据抓取过程。
  • onErrorCaptured():在捕获到后代组件传递的错误时,调用。错误可以从以下几个来源中捕获:组件渲染、事件处理器、生命周期钩子、setup()函数、侦听器、自定义指令钩子、过渡钩子。
  • onRenderTracked():调试钩子。当组件渲染过程中追踪到响应式依赖时,调用。这个钩子仅在开发模式下可用,且在服务器端渲染期间不会被调用。
  • onRenderTriggered():调试钩子。当响应式依赖的变更触发了组件渲染时,调用。这个钩子仅在开发模式下可用,且在服务器端渲染期间不会被调用。


注册周期钩子

举个例子,onMounted钩子,可以用来在组件完成初始渲染并创建 DOM 节点后运行代码。

还有其他一些钩子,会在实例生命周期的不同阶段被调用,最常用的是onMountedonUpdatedonUnmounted

当调用onMounted时,Vue 会自动将回调函数注册到当前正被初始化的组件实例上。这意味着这些钩子应当在组件初始化时被同步注册。例如,请不要这样做:

setTimeout(() => {
  onMounted(() => {
    // 这将不会正常工作
  })
}, 100)

请注意,这并不意味着对onMounted的调用必须放在setup()内的词法环境下。onMounted()也可以在一个外部函数中调用,只要调用栈是同步的,且最终起源自setup()


选项式 API

选项式 API 生命周期钩子:

  • beforeCreate:在实例初始化完成、props解析之后,在处理与状态相关的选项之前,调用。(与状态相关的选项:例如data()computed())。
  • created:在组件实例处理完所有与状态相关的选项后调用。当这个钩子被调用时,以下内容已经设置完成:响应式数据data()、计算属性computed()、方法methods:{}和侦听器watch()。但是,安装阶段尚未开始,该$el属性将不可用。
  • beforeMount():在组件被挂载之前,调用。当这个钩子被调用时,组件已经完成了其响应式状态的设置,但还没有创建 DOM 节点。它即将首次执行 DOM 渲染过程。这个钩子在服务器端渲染期间不会被调用。
  • mounted():在组件挂载完成后,调用。组件在以下情况下被视为已挂载:其所有同步子组件都已经被挂载(不包含异步组件或的组件)。其自身的 DOM 树已经创建完成并插入了父容器中。注意仅当根容器在文档中时,才可以保证组件 DOM 树也在文档中。这个钩子在服务器端渲染期间不会被调用。
  • beforeUpdate():由于响应式状态更改,在组件即将更新其 DOM 树之前,调用。这个钩子可以用来在 Vue 更新 DOM 之前访问 DOM 状态。在这个钩子中更改状态也是安全的。这个钩子在服务器端渲染期间不会被调用。
  • updated():由于响应式状态更改,在组件更新其 DOM 树之后,调用。父组件的更新钩子将在其子组件的更新钩子之后调用。这个钩子会在组件的任意 DOM 更新后被调用,这些更新可能是由不同的状态变更导致的。
  • beforeUnmount():在卸载组件实例之前,调用。当这个钩子被调用时,组件实例依然还保有全部的功能。这个钩子在服务器端渲染期间不会被调用。
  • unmounted():在卸载组件实例之后,调用。一个组件在以下情况下被视为已卸载:其所有子组件都已经被卸载。所有相关的响应式作用(渲染作用以及 setup()时创建的计算属性和侦听器)都已经停止。可以在这个钩子中手动清理一些副作用,例如计时器、DOM 事件监听器或者与服务器的连接。这个钩子在服务器端渲染期间不会被调用。
  • activated():若组件实例是缓存树的一部分,当组件被插入到 DOM 中时,调用。这个钩子在服务器端渲染期间不会被调用。
  • deactivated():若组件实例是缓存树的一部分,当组件从 DOM 中被移除时,调用。这个钩子在服务器端渲染期间不会被调用。
  • serverPrefetch():在组件实例在服务器上被渲染之前,调用。如果这个钩子返回了一个 Promise,服务端渲染会在渲染该组件前等待该 Promise 完成。这个钩子仅会在服务端渲染中执行,可以用于执行一些仅存在于服务端的数据抓取过程。

注册周期钩子

举个例子,mounted钩子可以用来在组件完成初始渲染并创建 DOM 节点后运行代码。

export default { mounted() {
    console.log(`the component is now mounted.`)
  }
}

生命周期钩子 - onBeforeMount()、onMounted()、 onBeforeUpdate()、 onUpdated() - vue 基础

还有其他一些钩子,会在实例生命周期的不同阶段被调用,最常用的是mountedupdatedunmounted

所有生命周期钩子函数的this,上下文都会自动指向当前调用它的组件实例。注意:避免用箭头函数来定义生命周期钩子,因为如果这样的话,你将无法在函数中,通过this获取组件实例。

鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)