• vue生命周期钩子函数


    1. vue生命周期:

    beforeCreate:在实例初始化后,data observer和event/watcher事件之前被调用=>
    created:实例已经创建完成之后调用,挂载阶段未开始,data observer,属性和方法运算,watch/event事件回调已经完成。{用来调用数据,调用方法,调用异步函数}=>
    beforeMount:在挂载之前被调用,相关的render函数首次被调用=>
    mounted:有初始值的DOM渲染,初始数据渲染完毕在这获取=>
    beforeUpdate:数据更新时调用,可以进一步更改状态,不会触发重新渲染=>
    updated:组件dom渲染已经更新,可以依赖于dom操作=>
    beforeDestory:实例销毁之前=>
    destoryed:vue实例销毁之后,解绑,移除监听器,销毁实例

     

    2. 钩子函数异步使用

    2.1 created异步

    1. <div id="app">
    2. <ul>
    3. <li v-for="(item,index) of list" key="index">{{item}}</li>
    4. </ul>
    5. </div>
    6. <script type="text/javascript">
    7. var app = new Vue({
    8. el:'#app',
    9. data:{
    10. list:['aaaaaaaa','bbbbbbb','ccccccc']
    11. },
    12. created:function(){
    13. consoloe.log('created异步:aaaaa');
    14. //异步获取数据
    15. // 因为是异步,就和我们ajax获取数据一样
    16. setTimeout(()=>{
    17. this.list=['111','222','333','444'],
    18. console.log('created异步:',document.getElementsByTagName('li').length);
    19. },0)
    20. },
    21. mounted: function () {
    22. console.log('mounted:',document.getElementsByTagName('li').length);
    23. },
    24. updated: function () {
    25. console.log('updated:',document.getElementsByTagName('li').length)
    26. },
    27. })
    28. </script>

    结果
    create: aaaaaaaa
    mounted: 3
    created异步函数: 3
    updated: 4
    原因
    可以看到因为是在created的钩子中加入异步函数,所以函数的执行顺序为:
    ceated钩子,mounted钩子,异步函数,updated钩子 (根据事件队列原理,只有在updated后,li才是真的DOM渲染为4个,所以异步函数中获取的li的个数时是没有变化的li的个数)
    因为mounted获取到的是我们在Vue的data中设置初始值渲染的DOM,而我们是在异步函数中变化的list数据,所以mounted获取的li的个数为3。
    update函数是只要数据vue绑定的数据变化就会触发,所以最后执行,为4
    2.2 updated异步

    1. /我们利用异步函数改变了两次list,会发现update被触发了2
    2. created:function(){
    3. //异步获取数据
    4. // 因为是异步,就和我们ajax获取数据一样
    5. setTimeout(()=>{
    6. this.list=['111','222','333','444'],
    7. console.log('created异步:',document.getElementsByTagName('li').length);
    8. },0)
    9. setTimeout(()=>{
    10. this.list=['快乐大本营','脚踏实地','300033','天天向上','好好学习'],
    11. console.log('created异步:',document.getElementsByTagName('li').length);
    12. },1000)
    13. },
    14. mounted: function () {
    15. console.log('mounted:',document.getElementsByTagName('li').length);
    16. },
    17. updated: function () {
    18. console.log('updated:',document.getElementsByTagName('li').length)
    19. }

    输出
    created异步: 3
    updated: 4
    created异步: 4
    updated: 5
    2.3 Vue.nextTick对异步函数的结果进行各自的操作

    1. created:function(){
    2. //异步获取数据
    3. // 因为是异步,就和我们ajax获取数据一样
    4. //为了在数据变化之后等待 Vue 完成更新 DOM ,可以在数据变化之后立即使用 Vue.nextTick(callback) 。这样回调函数在 DOM 更新完成后就会调用。
    5. setTimeout(()=>{
    6. this.list=['111','222','333','444'],
    7. console.log('created异步:',document.getElementsByTagName('li').length);
    8. this.$nextTick(function(){
    9. console.log("created$nextTick:",document.getElementsByTagName('li').length)
    10. });
    11. },0)
    12. setTimeout(()=>{
    13. this.list=['快乐大本营','脚踏实地','300033','天天向上','好好学习'],
    14. console.log('created异步:',document.getElementsByTagName('li').length);
    15. this.$nextTick(function(){
    16. console.log("created$nextTick:",document.getElementsByTagName('li').length)
    17. });
    18. },1000)
    19. },
    20. mounted: function () {
    21. console.log('mounted:',document.getElementsByTagName('li').length);
    22. },
    23. updated: function () {
    24. console.log('updated:',document.getElementsByTagName('li').length)
    25. },

    输出
    created异步:3
    updated:4
    created的nextTick:4
    updated:5
    created的$nextTick:5

  • 相关阅读:
    读高性能MySQL(第4版)笔记20_Performance Schema和其他
    网易传媒基于 Arctic 的低成本准实时计算实践
    操作系统入门系列-MIT6.828(操作系统工程)学习笔记(三)---- xv6初探与实验一(Lab: Xv6 and Unix utilities)
    【temu】美国版数据采集API
    IIC通信协议
    从阿里云“数字证书管理服务”申请免费的SSL证书
    vue3集成jsoneditor
    嵌入式Linux入门-从启动代码开始,真正从0开始点个灯
    Lua语言编写爬虫程序
    优化|优化处理可再生希尔伯特核空间的非参数回归中的协变量偏移
  • 原文地址:https://blog.csdn.net/m0_65912225/article/details/125478206