vue生命周期详解简书,请详细说下你对vue生命周期的理解

  vue生命周期详解简书,请详细说下你对vue生命周期的理解

  本文主要介绍了vue的生命周期,具有一定的参考价值。感兴趣的朋友可以参考一下,希望能帮到你。

  

目录

  为什么要了解生命周期?什么是生命周期钩子函数?创建和安装的钩子1的一些实际应用。异步函数

  2.Vue.nextTick对异步函数的结果进行操作

  摘要

  

为什么要理解生命周期

  有了Vue框架,熟悉它的生命周期可以让开发更好。

  如果只是简单的了解vue中的简单语法,就可以实现一些相应的项目和相应的思路。但如果出现问题,就需要借助生命周期来寻找。即使有一些需求,你也可以通过生命周期来决定我们应该把这个东西写在哪里。所以有必要了解vue的生命周期。

  

什么是生命周期

  Vue实例从创建到销毁的过程就是生命周期。详细来说就是创建、初始化数据、编译模板、挂载Dom、渲染更新渲染、卸载等一系列过程。

  另外,Vue的实例,也就是Vue框架的入口,可以理解为前端的ViewModel。它包含了页面中的业务逻辑处理和数据模型等。它还有自己的一系列生命周期函数钩子,帮助我们对整个Vue实例的生成、编译、挂起、销毁过程进行js控制。

  官网给出的生命周期图(翻译成中文)如下:

  

生命周期钩子函数

  生命周期挂钩只是生命周期事件的另一个名称。生命周期钩子=生命周期函数=生命周期事件。

  主要的生命周期函数分类:

  生命周期功能创建于:

  Before:实例刚刚在内存中创建,此时,data和methods属性还没有初始化。

  Created:实例已经在内存中创建了OK,此时数据和方法已经创建了OK,但是模板还没有编译。

  BeforeMount:此时模板已经编译好了,但是还没有挂载到页面上。

  Mounted:此时,编译后的模板已经被装载到页面上指定的容器中进行显示。

  运行期间的生命周期功能:

  Before:此函数在更新状态更新之前执行。此时数据中的状态值是最新的,但是界面上显示的数据还是旧的,因为DOM节点还没有重新渲染。

  Updated:在实例更新后调用这个函数。此时data中的状态值和界面上显示的数据已经更新,界面已经重新渲染!

  销毁期间的生命周期功能:

  BeforeDestroy:在实例销毁之前调用。在这一步,实例仍然完全可用。

  销毁:在Vue的实例被销毁后调用。调用后,Vue实例指示的所有内容都将被解除绑定,所有事件侦听器都将被移除,所有子实例都将被销毁。

  

created和mounted

  在生命周期的钩子函数中,最常用的是创建和挂载。

  Created:在模板渲染成html之前调用,也就是通常会初始化一些属性值,然后渲染成视图。主要应用:调用数据,调用方法,调用异步函数。

  Mounted:在模板被渲染成html之后调用,通常是在页面初始化之后,然后在html的dom节点上执行一些必要的操作。

  创建时,视图中的html是不渲染的,所以如果此时直接操作html的dom节点,是找不到相关元素的。

  在mounted中,由于此时已经呈现了html,所以可以直接操作dom节点,

  其实两者很好理解。通常,created是多次使用的,而mounted通常是在一些插件或组件的使用中操作的,比如插件chart . js:var CTX=document . getelementbyid(ID)的使用;通常会有这一步,如果你把它写成一个组件,你会发现你不能在created中对chart做一些初始化配置。你必须等待这个html被渲染后才能做,所以mounted是最好的选择。

  

钩子的一些实战用法

  

1.异步函数

  这里我们使用定时器作为异步函数。

  div id=应用程序

  保险商实验所

  li v-for=(item,index)of list key= index { { item } }/Li

  /ul

  /div

  脚本类型=文本/javascript

  var app=新Vue({

  埃尔: #app ,

  数据:{

  列表:[aaaaaaaa , bbbbbbb , ccccccc]

  },

  已创建:函数(){

  Consoloe.log(创建的异步:aaaaa );

  //异步获取数据

  //因为是异步的,就像我们用ajax获取数据一样。

  setTimeout(()={

  this.list=[111 , 222 , 333 , 444],

  Console.log(创建的异步:,document.getelementsbyname (li )。长度);

  },0)

  },

  已安装:函数(){

  console.log(mounted:,document . getelementsbytagname( Li )。长度);

  },

  已更新:函数(){

  console.log(updated:,document . getelementsbytagname( Li )。长度)

  },

  })

  /脚本

  结果为:

  创建:aaaaaaaa

  已安装:3

  创建的异步函数:3

  更新日期:4

  解释:

  可以看到异步函数被添加到created的钩子中,所以该函数的执行顺序是:

  Ced hook,mounted hook,异步函数,updated hook(根据事件队列原理,只有更新后,li才是真实的,DOM渲染为4,所以异步函数中获取的li数就是没有变化的li数)。

  Mounted获取的是Vue的数据中设置初始值渲染的DOM,而我们是异步函数中变化的列表数据,所以mounted获取的li数是3。

  只要data vue绑定的数据发生变化就触发update函数,所以最后执行,也就是4。

  这是否意味着可以直接在更新功能中操作?其实并没有,因为更新功能针对的是vue所有数据的变化,我们也可能会有其他数据的变化。

  例如下面的例子:

  //我们用异步函数修改了两次列表,发现更新被触发了两次。

  已创建:函数(){

  //异步获取数据

  //因为是异步的,就像我们用ajax获取数据一样。

  setTimeout(()={

  this.list=[111 , 222 , 333 , 444],

  Console.log(创建的异步:,document.getelementsbyname (li )。长度);

  },0)

  setTimeout(()={

  This.list=[快乐大本营,脚踏实地, 300033 ,天天向上,好好学习],

  Console.log(创建的异步:,document.getelementsbyname (li )。长度);

  },1000)

  },

  已安装:函数(){

  console.log(mounted:,document . getelementsbytagname( Li )。长度);

  },

  已更新:函数(){

  console.log(updated:,document . getelementsbytagname( Li )。长度)

  },

  结果为:

  

2.Vue.nextTick对异步函数的结果进行操作

  当我们想要改变数据时,我们每个人都触发自己的方法。

  已创建:函数(){

  //异步获取数据

  //因为是异步的,就像我们用ajax获取数据一样。

  //为了在数据改变后等待Vue完成更新DOM,可以在数据改变后立即使用Vue.nextTick(callback)。这样,回调函数将在DOM更新完成后被调用。

  setTimeout(()={

  this.list=[111 , 222 , 333 , 444],

  Console.log(创建的异步:,document.getelementsbyname (li )。长度);

  这个。$nextTick(function(){

  console.log(created$nextTick:,document . getelementsbytagname( Li )。长度)

  });

  },0)

  setTimeout(()={

  This.list=[快乐大本营,脚踏实地, 300033 ,天天向上,好好学习],

  Console.log(创建的异步:,document.getelementsbyname (li )。长度);

  这个。$nextTick(function(){

  console.log(created$nextTick:,document . getelementsbytagname( Li )。长度)

  });

  },1000)

  },

  已安装:函数(){

  console.log(mounted:,document . getelementsbytagname( Li )。长度);

  },

  已更新:函数(){

  console.log(updated:,document . getelementsbytagname( Li )。长度)

  },

  结果为:

  我们可以看到,通过$nextTick,我们可以对异步函数的结果进行操作。

  

总结

  本文到此为止。希望能帮到你,也希望你能多关注我们的更多内容!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: