【翠花学Vue】每日打卡——vue打卡4

vue的生命周期

vue的生命周期一共有四组:

创建前(beforeCreate),创建完成时(created) ----->挂载前(beforeMOunt),挂载完成时(mounted)-------->修改前(beforeUpdate),修改完成时(updated)-------->销毁前(beforeDestroy),销毁完成时(destroyed)。

通过以下代码可以查看不同状态时的内容。

beforeCreate和created 这一组生命周期,中间包含data中的属性值注入以及一些反应。

beforeMount和mounted 这一组生命周期,中间包含指定el对应的模板完成渲染。

beforeUpdate和updated 这一组生命周期,在data中的属性发生改变,会将页面重新完成渲染。

  <div id="app">
        {{msg}}
        <button @click="modify">点击修改</button>
    </div>
   
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el:"#app",
            data(){
                return{
                    msg:"张三"
                } 
            },
            methods:{
                modify(){
                    this.msg="李四"
                }
            },
            //1.beforeCreate  created
            beforeCreate(){
                console.log("beforeCreate-----"+this.msg)
            },
            created(){
                console.log("created----"+this.msg)
            },
            //2.beforeMount mounted
            beforeMount(){
                console.log("beforeMount---"+document.getElementById("app").innerHTML)
            },
            mounted(){
                console.log("mounted----"+document.getElementById("app").innerHTML)
            },
            //3.beforeUpdate  updated
            beforeUpdate(){
                console.log("beforeUpdate------"+document.getElementById("app").innerHTML)
            },
            updated(){
                console.log("updated----"+document.getElementById("app").innerHTML)
            }
        })
    </script>

销毁生命周期可以通过组件的行为事件来触发。

 <div id="app">
        <taobao v-if="flag==1"></taobao>
        <button @click="hideComp">点击隐藏</button>
    </div>
    <script src="js/vue.js"></script>
    <script>
        var taobao={
            template:`
                <div>淘宝</div>
            `,
            beforeDestroy(){
                console.log("beforeDestroy")
            },
            destroyed(){
                console.log("destoryed")
            }
        }
        new Vue({
            el:"#app",
            components:{
                "taobao":taobao
            },
            data(){
                return{
                    flag:1
                }
                
            },
            methods:{
                hideComp(){
                    this.flag=2;
                }
            }
        })
    </script>

 

 如果此时我修改刚刚的代码,添加一个显示的方法,那么每次我隐藏时就会销毁组件,我显示时又会重新创建组件。反复的重建对性能来说一定会造成很大的影响。

  <div id="app">
        <taobao v-if="flag==1"></taobao>
        <button @click="hideComp">点击隐藏</button>
        <button @click="showComp">点击显示</button>
    </div>
    <script src="js/vue.js"></script>
    <script>
        var taobao={
            template:`
                <div>淘宝</div>
            `,
            beforeCreate(){
                console.log("创建前");
            },
            created(){
                console.log("创建完成时")
            },
            beforeDestroy(){
                console.log("beforeDestroy")
            },
            destroyed(){
                console.log("destoryed")
            }
        }
        new Vue({
            el:"#app",
            components:{
                "taobao":taobao
            },
            data(){
                return{
                    flag:1
                }
                
            },
            methods:{
                showComp(){
                    this.flag=1;
                },
                hideComp(){
                    this.flag=2;
                }
            }
        })
    </script>

那么要想解决这种问题,可以使用<keep-alive></keep-alive>标签。

 actived和deactived:激活和停用,对于组件来说,通过v-if使用完成组件的隐藏和显示。

通过<keep-alive></keep-alive>将组件包裹,则会触发 actived和deactived,提升组件的性能。

 <div id="app">
        <keep-alive>
        <taobao v-if="flag==1"></taobao>
        </keep-alive>
        <button @click="hideComp">点击隐藏</button>
        <button @click="showComp">点击显示</button>
    </div>
    <script src="js/vue.js"></script>
    <script>
        var taobao={
            template:`
                <div>淘宝</div>
            `,
            beforeCreate(){
                console.log("beforeCreate------")
            },
            created(){
                console.log("created------")
            },
            activated(){
                console.log("激活")
            },
            deactivated(){
                console.log("停用")
            }
        }
        new Vue({
            el:"#app",
            components:{
                "taobao":taobao
            },
            data(){
                return{
                    flag:1
                }
                
            },
            methods:{
                hideComp(){
                    this.flag=2;
                },
                showComp(){
                    this.flag=1;
                }
            }
        })
    </script>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BUG忠实爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值