vue的生命周期

1、Vue生命周期的8个阶段

Vue实例从创建到销毁的过程,就是生命周期。
开始创建初始化数据编译模板挂载Dom渲染更新销毁等一系列过程,称之为
Vue 的生命周期。

  • 1、beforeCreate(创建前) 在数据观测和初始化事件还未开始
  • 2、created(创建后) 完成数据观测,属性和方法的运算,初始化事件,$el属性还没有显示出来
  • 3、beforeMount(载入前) 在挂载开始之前被调用,相关的render函数首次被调用。实例已完成以下的配置:编译模板,把data里面的数据和模板生成html。注意此时还没有挂载html到页面上。
  • 4、mounted(载入后) 在el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用。实例已完成以下的配置:用上面编译好的html内容替换el属性指向的DOM对象。完成模板中的html渲染到html页面中。此过程中进行ajax交互。
  • 5、beforeUpdate(更新前) 在数据更新之前调用,发生在虚拟DOM重新渲染和打补丁之前。可以在该钩子中进一步地更改状态,不会触发附加的重渲染过程。
  • 6、updated(更新后) 在由于数据更改导致的虚拟DOM重新渲染和打补丁之后调用。调用时,组件DOM已经更新,所以可以执行依赖于DOM的操作。然而在大多数情况下,应该避免在此期间更改状态,因为这可能会导致更新无限循环。该钩子在服务器端渲染期间不被调用。
  • 7、beforeDestroy(销毁前) 在实例销毁之前调用。实例仍然完全可用。
  • 8、destroyed(销毁后) 在实例销毁之后调用。调用后,所有的事件监听器会被移除,所有的子实例也会被销毁。该钩子在服务器端渲染期间不被调用。

2、每个周期具体适用于哪些场景

1)beforeCreate:可以在这加loading事件,在加载实例时触发。
2)created:初始化完成时的事件写在这里,如在这里结束loading异步请求也适合在这里调用。
3)mounted挂载元素,获取到dom节点
4)updated:如果对数据统一处理,在这里写上相应的函数。
5)beforeDestroy清空定时器等。

3、对Vue.js的template编译的理解

● 首先,通过compile编译器把template模版编译成AST语法树
(compile是creatCompiler的返回值,compile负责合并option)

● 然后,AST会经过generate(将AST语法树转化成render function字符串的过程)得到render函数render的返回值是VNode(虚拟DOM)
(VNode本质就是一棵树型结构的对象,里面包含标签名、子节点、文本、属性等)

● 最后, 将VNode作为参数传给Vue的update 方法,转换为真实的dom
( update方法它有两个执行时机:初次渲染 和 更新;

  • 初次渲染时,也就是执行new Vue 时,直接创建新的dom。
  • 更新时,通过diff算法对比新旧VNode的异同,对相同的地方充分复用,对不同的地方进行打补丁,以最小的消耗更新dom.)

4、常见问题

  • 第一次页面加载会触发哪几个钩子?
    第一次页面加载会触发下beforeCreate, created, beforeMount, mounted

  • DOM 渲染在哪个周期中就已经完成?
    mounted

参考链接 :https://blog.csdn.net/chenzhizhuo/article/details/101291652
参考链接:https://blog.csdn.net/aSuncat/article/details/88978775

你可能感兴趣的:(Vue,vue生命周期,对template的理解)