生命周期钩子

收藏841

阅读14073

更新时间2025-08-22

'beforeCreate' 钩子

beforeCreate 生命周期钩子发生在组件初始化之前,因此这是在 Vue 设置组件的数据、计算属性、方法和事件侦听器之前。

beforeCreate 钩子可用于设置全局事件监听器,但我们应该避免尝试从 beforeCreate 生命周期钩子访问属于组件的元素,例如数据、观察者和方法,因为它们不是 在此阶段尚未创建。

此外,尝试从 beforeCreate 生命周期钩子访问 DOM 元素是没有意义的,因为它们是在组件 mounted 之后才创建的。

示例

CompOne.vue:




App.vue:






运行示例 »

在上面的示例中,CompOne.vue 中的第 15 行没有任何效果,因为在该行中我们尝试更改 Vue 数据属性内的文本,但 Vue 数据属性实际上尚未创建。 另外,请记住打开浏览器控制台以查看第 16 行的 console.log() 调用的结果。


'created' 钩子

created 生命周期钩子在组件初始化后发生,因此 Vue 已经设置了组件的数据、计算属性、方法和事件侦听器。

我们应该避免尝试从 created 生命周期钩子访问 DOM 元素,因为在组件为 mounted 之前,无法访问 DOM 元素。

创建的生命周期钩子可用于通过 HTTP 请求获取数据,或设置初始数据值。 就像下面的例子一样,data 属性"text"被赋予一个初始值:

示例

CompOne.vue:




App.vue:






运行示例 »

'beforeMount' 钩子

beforeMount 生命周期钩子发生在组件mounted之前,也就是将组件添加到 DOM 之前。

我们应该避免尝试从 beforeMount 生命周期钩子访问 DOM 元素,因为在组件安装之前,无法访问 DOM 元素。

下面的示例显示我们还无法访问组件中的 DOM 元素,CompOne.vue 中的第 11 行不起作用,并在浏览器控制台中生成错误:

示例

CompOne.vue:




App.vue:






运行示例 »

'mounted' 钩子

将组件添加到 DOM 树后,立即调用 mounted() 函数,我们可以将代码添加到该阶段。

这是我们第一次有机会执行与属于该组件的 DOM 元素相关的操作,例如使用 ref 属性和 $refs 对象,就像我们在下面的第二个示例中所做的那样。

示例

CompOne.vue:




App.vue:






运行示例 »

注意:mounted 阶段发生在组件添加到 DOM 之后,但在上面的示例中,alert() 在我们看到组件之前就可见。 原因是,首先将组件添加到 DOM,但在浏览器将组件渲染到屏幕之前,会发生 mounted 阶段,并且 alert() 变得可见并暂停浏览器渲染组件。

下面是一个可能更有用的示例:在安装表单组件后将光标放在输入字段内,以便用户可以开始输入。

示例

CompOne.vue:




运行示例 »

'beforeUpdate' 钩子

只要组件的数据发生更改,但在更新呈现到屏幕上之前,就会调用 beforeUpdate 生命周期钩子。 beforeUpdate 生命周期钩子发生在updated 生命周期钩子之前。

beforeUpdate 钩子的特殊之处在于,我们可以对应用程序进行更改,而不会触发新的更新,因此我们可以避免无限循环。 这就是不在 updated 生命周期钩子中对应用程序进行更改的原因,因为使用该钩子将创建无限循环。 请看下面的第三个示例(红色)。

示例

beforeUpdate() 函数向文档添加

  • 标签,以指示 beforeUpdate() 函数已运行。

    CompOne.vue:

    
    

    App.vue:

    
    
    
    
    
    
    运行示例 »

    'updated' 钩子

    updated 生命周期钩子在我们的组件更新其 DOM 树后被调用。

    示例

    updated() 函数使用 console.log() 写入一条消息。 每当页面更新时都会发生这种情况,在本例中是每次添加或删除组件时。

    CompOne.vue:

    
    

    App.vue:

    
    
    
    
    
    
    运行示例 »

    点击"添加/删除组件"按钮10次后,我们可以在浏览器控制台中看到结果:

    console screenshot

    注意:我们必须小心,当调用 updated 生命周期钩子时,不要修改页面本身,因为这样页面会一次又一次更新 ,创建无限循环。

    让我们尝试一下,如果我们完全按照上面警告我们的注释去做,会发生什么。 页面会无限期更新吗?:

    示例

    updated() 函数将文本添加到段落中,从而再次更新页面,并且该函数在无限循环中一次又一次地运行。 幸运的是,您的浏览器最终会停止这个循环。

    CompOne.vue:

    
    

    App.vue:

    
    
    
    
    
    
    运行示例 »

    在开发模式下在本地计算机上运行上述代码时,Chrome 浏览器控制台警告如下所示:

    screenshot browser console warning

    'beforeUnmount' 钩子

    beforeUnmount 生命周期钩子在组件从 DOM 中删除之前被调用。

    正如我们在下面的示例中看到的,我们仍然可以在 beforeUnmount 钩子中访问 DOM 中的组件元素。

    示例

    CompOne.vue:

    
      
    
    

    App.vue:

    
    
    
    
    
    
    运行示例 »

    'unmounted' 钩子

    从 DOM 中删除组件后,将调用 unmounted 生命周期钩子。

    例如,此钩子可用于删除事件侦听器或取消计时器或间隔。

    当组件为 unmounted 时,会调用unmounted()函数,我们可以向其中添加我们的代码:

    示例

    CompOne.vue:

    
    
    
    

    App.vue:

    
    
    
    
    
    
    运行示例 »

    注意:unmounted 阶段发生在组件从 DOM 中删除之后,但在上面的示例中,alert() 在组件消失之前可见。 原因是首先从 DOM 中删除组件,但在浏览器将组件的删除呈现到屏幕上之前,会发生 unmounted 阶段,alert() 变得可见,并暂停浏览器以可见方式删除组件。


    'errorCaptured' 钩子

    当子/后代组件中发生错误时,将调用 errorCaptured 生命周期钩子。

    该钩子可用于错误处理、记录或向用户显示错误。

    示例

    CompOne.vue:

    
    
    
    

    App.vue:

    
    
    
    
    
    
    运行示例 »

    有关错误的信息也可以作为参数捕获到 errorCaptured() 函数,这些参数是:

    1. 错误
    2. 触发错误的组件
    3. 错误源类型

    在下面的示例中,这些参数在 errorCaptured() 函数中捕获并写入控制台:

    示例

    CompOne.vue:

    
    
    
    

    App.vue:

    
    
    
    
    
    
    运行示例 »

    "renderTracked"和"renderTriggered"生命周期钩子

    当渲染函数设置为跟踪或监视反应式组件时,renderTracked 钩子就会运行。 renderTracked 钩子通常在反应式组件初始化时运行。

    当此类跟踪的反应式组件发生变化时,renderTriggered 钩子就会运行,因此会触发新的渲染,以便屏幕会更新为最新的更改。

    响应式组件是可以更改的组件。

    渲染函数是由 Vue 编译的函数,用于跟踪反应式组件。 当反应性组件发生变化时,渲染函数被触发并将应用程序重新渲染到屏幕上。

    renderTrackedrenderTriggered 钩子旨在用于调试,并且仅在开发模式下可用。

    要从 renderTrackedrenderTriggered 钩子查看 alert()console.log(),您必须将以下示例中的代码复制到您的计算机并在开发模式下运行应用程序。

    示例

    CompOne.vue:

    
      
    
    

    App.vue:

    
    
    
    
    运行示例 »

    注意:上例中的代码旨在以开发模式复制并在您的计算机上本地运行,因为 renderTrackedrenderTriggered 钩子仅在开发模式下工作。


    'activated' 和 'deactivated' 生命周期钩子

    正如我们在此页面上看到的,当组件被删除或添加到 DOM 时,我们有 mountedunmounted 生命周期钩子。

    activateddeactivated 生命周期钩子适用于添加或删除缓存的动态组件,但不适用于 DOM。 下面的示例中使用 标签来缓存动态组件。

    示例

    CompOne.vue:

    
      
    
    
    
    

    App.vue:

    
    
    
    
    
    
    运行示例 »

    让我们扩展上面的示例,看看 activateddeactivated 钩子如何工作。 我们还使用 mountedunmounted 钩子,这样我们就可以看到 mounted 钩子在第一次添加缓存组件时运行,而 unmounted 钩子永远不会为缓存组件运行。

    示例

    CompOne.vue:

    
      
    
    
    
    

    App.vue:

    
    
    
    
    
    
    运行示例 »

    serverPrefetch 生命周期钩子

    "serverPrefetch" 钩子仅在服务器端渲染 (SSR) 期间调用。

    解释和创建 "serverPrefetch" 钩子的示例需要相对较长的介绍和设置,这超出了本教程的范围。


    Vue 练习

    通过练习测试自己

    练习题:

     生命周期钩子在组件从 DOM 中删除之前调用。
    

  • 相关

    视频

    RELATED VIDEOS

    更多

    免费

    Web前端开发极速入门
    初级 Web前端开发极速入门

    219920次学习

    收藏

    免费

    前端入门_HTML5
    初级 前端入门_HTML5

    616946次学习

    收藏

    免费

    30分钟学会网站布局
    初级 30分钟学会网站布局

    238440次学习

    收藏

    免费

    CSS视频教程-玉女心经版
    初级 CSS视频教程-玉女心经版

    393054次学习

    收藏

    免费

    独孤九贱(1)_HTML5视频教程

    免费

    独孤九贱(6)_jQuery视频教程

    免费

    独孤九贱(7)_Bootstrap视频教程

    免费

    独孤九贱(2)_CSS视频教程
    初级 独孤九贱(2)_CSS视频教程

    229605次学习

    收藏

    精选课程

    更多
    前端入门_HTML5
    前端入门_HTML5

    共29课时

    61.7万人学习

    CSS视频教程-玉女心经版
    CSS视频教程-玉女心经版

    共25课时

    39.3万人学习

    JavaScript极速入门_玉女心经系列
    JavaScript极速入门_玉女心经系列

    共43课时

    71万人学习

    独孤九贱(1)_HTML5视频教程
    独孤九贱(1)_HTML5视频教程

    共25课时

    61.6万人学习

    独孤九贱(2)_CSS视频教程
    独孤九贱(2)_CSS视频教程

    共22课时

    23万人学习

    独孤九贱(3)_JavaScript视频教程
    独孤九贱(3)_JavaScript视频教程

    共28课时

    33.9万人学习

    独孤九贱(4)_PHP视频教程
    独孤九贱(4)_PHP视频教程

    共89课时

    125万人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送
    PHP中文网APP
    随时随地碎片化学习

    Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号