浅析Vue中生命周期函数的区别

 更新时间:2023年08月09日 10:52:27   作者:爱敲代码的小林  
生命周期分为四个对子,根据不同的情况使用不同的函数,这篇文章主要为大家介绍了这些函数的使用与区别,感兴趣的小伙伴可以了解一下

生命周期图

 上图生命周期每个红色的钩子是一个阶段,可以在每个不同的阶段写合适的代码。

生命周期函数

生命周期分为四个对子,根据不同的情况使用不同的函数

其中beforeUpdate、updated能执行多次

beforeCreate、created创建前、创建后
beforeMount、mounted挂载前、挂载后
beforeUpdate、updated更新前、更新后
beforeDestroy、destroyed销毁前、销毁后

下面的四种应用场景用的统一HTML代码

<div id="app">
    {{myName}}
</div>

beforeCreate和created的区别

创建前、创建后

beforeCreate创建前应用场景

vue代码:

var app = new Vue({
        el: '#app',
        data() {
            return {
                myName:'abc',
            }
        },
        beforeCreate(){
            //获取body并输出测试
            var bodyDom=document.getElementsByTagName("body")[0].innerHTML;
            console.log("created",this.myName,bodyDom);
        }
    });

浏览器输出结果:

beforeCreate中data的数据是没有被定义的,created后面是undefined并且{{myName}}还未被识别

created创建后应用场景

vue代码:

var app = new Vue({
    el: '#app',
    data() {
        return {
            myName:'abc',
        }
    },
    created(){
        //获取body并输出测试
        var bodyDom=document.getElementsByTagName("body")[0].innerHTML;
        console.log("created",this.myName,bodyDom);
    }
});

浏览器输出结果:

created主要做一些页面的数据的数据初始化工作,获取到了myName的值,但是后台显示的还是{{myName}}值还未被填上去

beforeMount和mounted的区别

挂载前、挂载后

 beforeMount挂载前应用场景

vue代码:

var app = new Vue({
    el: '#app',
    data() {
        return {
            myName:'abc',
        }
    },
    beforeMount(){
            //获取body并输出测试
            var bodyDom=document.getElementsByTagName("body")[0].innerHTML;
            console.log("beforeMount",this.myName,bodyDom);
        },
    }
});

浏览器输出结果:

输出结果和created创建后一样,是在创建后挂载前,自我感觉没啥大用

mounted挂载后应用场景

vue代码:

var app = new Vue({
    el: '#app',
    data() {
        return {
            myName:'abc',
        }
    },
    mounted(){
            //获取body并输出测试
            var bodyDom=document.getElementsByTagName("body")[0].innerHTML;
            console.log("beforeMount",this.myName,bodyDom);
        },
    }
});

浏览器输出结果:

数据已经渲染到View中

beforeUpdate和updated的区别

更新前、更新后;和其他三个不同可被重复执行

beforeUpdate更新前应用场景

vue代码:

var app = new Vue({
    el: '#app',
    data() {
        return {
            myName:'abc',
        }
    },
    beforeUpdate(){
            //获取body并输出测试
            var bodyDom=document.getElementsByTagName("body")[0].innerHTML;
            console.log("beforeMount",this.myName,bodyDom);
        },
    }
});

浏览器输出结果:

数据更新前,数据未改变

updated更新后应用场景

vue代码:

var app = new Vue({
    el: '#app',
    data() {
        return {
            myName:'abc',
        }
    },
    updated(){
            //获取body并输出测试
            var bodyDom=document.getElementsByTagName("body")[0].innerHTML;
            console.log("beforeMount",this.myName,bodyDom);
        },
    }
});

浏览器输出结果:

数据更新后,数据已改变

beforeDestroy和destroyed的区别

销毁前、销毁后

beforeDestroy销毁前

一般应用到的场景:

  • 清除定时器
  • 解绑自定义事件
  • 取消订阅、事件监听

没有具体代码演示

destroyed销毁后

此钩子函数会在组件实例销毁之后执行,此时所有的组件包括子组件都被销毁了。

也没有具体代码演示

总结

几个生命周期函数各有各的特点,根据不同的业务,使用不同的生命周期函数来解决问题。

到此这篇关于浅析Vue中生命周期函数的区别的文章就介绍到这了,更多相关Vue生命周期函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue项目中mock.js的使用及基本用法

    vue项目中mock.js的使用及基本用法

    mockjs是用来模拟产生一些虚拟的数据,可以让前端在后端接口还没有开发出来时独立开发。这篇文章主要介绍了vue项目中mock.js的使用,需要的朋友可以参考下
    2019-05-05
  • 详解nuxt sass全局变量(公共scss解决方案)

    详解nuxt sass全局变量(公共scss解决方案)

    这篇文章主要介绍了详解nuxt sass全局变量(公共scss解决方案),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • 使用Vue+MySQL实现登录注册的实战案例

    使用Vue+MySQL实现登录注册的实战案例

    第一次用Vue+MySQL实现注册登录功能,就已经踩了很多坑,下面这篇文章主要给大家介绍了关于使用Vue+MySQL实现登录注册案例的相关资料,需要的朋友可以参考下
    2022-05-05
  • 详解vue中的父子传值双向绑定及数据更新问题

    详解vue中的父子传值双向绑定及数据更新问题

    这篇文章主要介绍了vue中的父子传值双向绑定及数据更新问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-06-06
  • vue 自动生成swagger接口请求文件的方法

    vue 自动生成swagger接口请求文件的方法

    这篇文章主要介绍了vue 自动生成swagger接口请求文件的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-01-01
  • Vue-cli 移动端布局和动画使用详解

    Vue-cli 移动端布局和动画使用详解

    这篇文章主要介绍了Vue-cli和移动端布局和动画使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • vue项目部署到非根目录下的问题及解决

    vue项目部署到非根目录下的问题及解决

    这篇文章主要介绍了vue项目部署到非根目录下的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • vue路由 遍历生成复数router-link的例子

    vue路由 遍历生成复数router-link的例子

    今天小编就为大家分享一篇vue路由 遍历生成复数router-link的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • uniapp 拖拽图片排序功能实现 类似于微信朋友圈效果

    uniapp 拖拽图片排序功能实现 类似于微信朋友圈效果

    这篇文章主要介绍了uniapp 拖拽图片排序功能实现类似于微信朋友圈,一部分是拖拽的放大做小,xy位置判定,图片数组的插入排序,另一部分是上传加号图片的 定位  动态计算分为几列,每一个图片大小的位置 绝对定位的计算,需要的朋友可以参考下
    2024-07-07
  • vue中slot插槽的参数汇总及使用方案

    vue中slot插槽的参数汇总及使用方案

    Vue.js中的插槽(slot)是一种机制,允许你在组件的模板中预留一些位置,以便父组件可以将任意内容插入到这些位置,这使得组件更加灵活和可复用,本文主要介绍了vue中slot插槽的参数汇总及使用方案,需要的朋友可以参考下
    2024-03-03

最新评论