【Vue】---生命周期

Vue 组件生命周期钩子函数

生命周期函数,指的是组件的创建、更新、销毁三个阶段所触发执行的函数。根据每个阶段触发的钩子函数,我们可以相应的做一些操作,如获取后端接口数据、监听事件、执行事件、执行定时器、移除事件、清理定时器等等

1.实例化期(组件创建)

<1>beforeCreate:在实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用。

<2>created:在实例创建完成后被立即调用。在这一步,实例已完成以下的配置:数据观测 (data observer),属性和方法的运算,watch/event 事件回调。然而,挂载阶段还没开始,$el 属性目前不可见。

<3>beforeMount:在挂载开始之前被调用:相关的 render 函数首次被调用。$el 属性已经可见,但还是原来的 DOM,并非是新创建的。

<4>mounted:el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用该钩子。如果 root 实例挂载了一个文档内元素,当 mounted 被调用时 vm.$el 也在文档内。

注意 mounted 不会承诺所有的子组件也都一起被挂载。如果你希望等到整个视图都渲染完毕,可以用 vm.$nextTick 替换掉 mounted

mounted: function () {
  this.$nextTick(function () {
    // Code that will run only after the
    // entire view has been rendered
  })
}

2.存在期(组件更新)

<1>beforeUpdate:

数据更新时,虚拟 DOM 变化之前调用,这里适合在更新之前访问现有的 DOM,比如手动移除已添加的事件监听器。

请不要在此函数中更改状态,否则会触发死循环。

<2>updated:

数据更新和虚拟 DOM 变化之后调用。

当这个钩子被调用时,组件 DOM 已经更新,所以你现在可以执行依赖于 DOM 的操作。然而在大多数情况下,你应该避免在此期间更改状态。如果要相应状态改变,通常最好使用计算属性watcher 取而代之。

和 mounted 一样, updated 不会承诺所有的子组件也都一起被重绘。如果你希望等到整个视图都重绘完毕,可以用 vm.$nextTick 替换掉 updated

updated: function () {
  this.$nextTick(function () {
    // Code that will run only after the
    // entire view has been re-rendered
  })
}

请不要在此函数中更改状态,否则会触发死循环。

3.销毁期(组件销毁)

<1>beforeDestroy:

实例销毁之前调用,在这一步,实例仍然完全可用。一般在这里移除事件监听器、定时器等,避免内存泄漏

<2>destroyed:

Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。

所以如果需要用到 Vue 实例指示的所用绑定的东西,需要在 beforeDestroy 中使用。这么说,destroyed 函数能做的事,在 beforeDestroy 也能做,所以没必要在 destroyed 函数中处理。

【Vue】---生命周期

 

【Vue】---生命周期

 

 

其他不常用的生命周期函数

  • activated

    当组件激活的时候调用,可以参考构建组件 - keep-alive

  • deactivated

    当组件停用的时候调用,可以参考构建组件 - keep-alive

  • errorCaptured

    这个生命钩子详细请看官网,2.5.0 新增的,当捕获一个来自子孙组件的错误时被调用。

参考地址: https://juejin.cn/post/6844903845693227021 https://segmentfault.com/a/1190000014705819
上一篇:vue滚动插件BetterScroll回到顶部


下一篇:vue中使provide中的数据变为响应式