Vue的生命周期

 

Vue的生命周期图

 

红色圈出来的都是钩子函数,成对的,和el、template、data一个级别。

组件也是一个Vue实例,也有这些生命周期,并不是说要显式new Vue()才是一个Vue对象。

 

 

 

demo   Vue的生命周期

index.html

复制代码
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <!-- 引入vue.js -->
        <script src="js/vue.js" type="text/javascript" charset="utf-8"></script> 
        
    </head>
    <body>
        
    <div id="app"></div>
    
    <script src="js/test.js"></script>        
        
    </body>
</html>
复制代码

把js脚本单独拿了出来

 

 

test.js

复制代码
    Vue.component('Test',{
        template:`
            <div>
                <p>{{msg}},我是test组件</p>
                <button @click='msg+=" chy"'>更新数据</button>  <!-- +是字符串拼接 -->
            </div>
        `,
        data(){
            return{
                msg:'hello'
            }
        },
        
        
        // 组件创建前,数据尚未挂载
        beforeCreate(){
            console.log('组件创建前',this.msg);  //this.msg是undefined
        },
        // 组件创建后,数据已挂载
        created(){
            console.log('组件创建后',this.msg);  //this.msg有值
        },
        // dom挂载前,此时此组件的dom尚未挂载
        beforeMount() {
            console.log('dom挂载前',document.body.innerHTML);  //<div id="app"></div>
        },
        // dom挂载后,此时此组件的dom已挂载
        mounted() {
            console.log('dom挂载后',document.body.innerHTML);  //<div><div><p>hello,我是test组件</p></div></div>
        },
        
        
        // 组件激活。dom挂载后,组件会被激活
        activated() {
            console.log('组件激活')
        },
        // 组件停用
        deactivated() {
            console.log('组件停用');
        },
        
        
        // 数据更新前,数据指的是内存中的数据,比如msg
        beforeUpdate() {
            console.log('数据更新前',document.body.innerHTML);
        },
        // 数据更新后
        updated() {
            console.log('数据更新后',document.body.innerHTML);  //如果打印的是this.msg,数据要已发生更新才能界定更新前后,此时数据已变了,更新前后打印出来的this.msg是一样的
        },
        
        
        // 组件销毁前
        beforeDestroy() {
            console.log('组件销毁前');
        },
        // 组件销毁后
        destroyed() {
            console.log('组件销毁后');
        },
        
        
    })



        
    new Vue({
        el:'#app',
        template:`
            <div>
                <Test v-if='display'></Test> <!--绑定内存中给的display变量。v-if不显示组件时,会销毁组件;显示组件时,是重新创建组件-->
                <button @click='createOrDestroy'>销毁|创建组件</button>
            </div>
        `,
        data(){
            return{
                display:true
            }
        },
        methods:{
            createOrDestroy(){
                this.display=!this.display;  //换为相反的
            }
        }
    });
    
<keep-alive><Test v-if='display'></Test></keep-alive>
复制代码

 

 

 

性能调优

频繁的新建组件对性能有很大的影响。可以把组件放在<keep-alive>中:

<keep-alive> <Test v-if='display'></Test> </keep-alive>

这样v-if为false时会缓存组件(停用组件),并不是直接销毁;当v-if为true时又激活组件。

 

posted @   chy-x  阅读(495)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决
点击右上角即可分享
微信分享提示