关于Vue的生命周期

 组件从创建初始到注销的过程中,经常会需要在某些时刻去执行一些逻辑代码,vue每个组件的生命周期中会暴露出很多生命钩子 这些钩子函数会在特定的时刻执行,组件或实例生命周期会经历三个阶段 初始化/运行中/销毁

body部分的代码

<div id="app">
        <h1>{{message}}</h1>
        <app-com></app-com>
    </div>
    <template id="app-com">
        <div>
            <h1 id="title">{{title}}---{{num}}</h1>
            <button @click='destroy'>destroyed</button>
            <input type="text" v-model='title'>
        </div>
        
    </template>

js

// 1. 当组件或者Vue被实例化的时候,代表组件或者Vue的生命周期开始
// 2. 初始化事件监听和生命周期
Vue.component('app-com',{
        template:'#app-com',
        data(){
            return {
                title:'biu',    
                num:0
            }
        },
        methods:{
            destroy(){
                this.$destroy()
            }
        },
        // 3. beforeCreate  此时数据还未挂载, dom也没有渲染, 基本没有什么作用
        beforeCreate(){
            console.log('beforeCreate',this.title,document.querySelector('#title'))
        },
        // 4. 挂载数据,绑定数据监听等...
        // 5.created 数据已经挂载 可以操作数据,并且不会触发运行中阶段的钩子函数,
        // 经常会在这里做数据的初始化挂载 但是dom还未render
        created(){
            console.log('created',this.title,document.querySelector('#title'))
        },
        // 6. 查找组件或者实例的模板,进行编译,编译成虚拟dom结构放入到render函数中
        // 7. beforeMount 也可以访问数据,操作数据,dom还没有渲染,作用和created一样,做初始数据的获取与挂载
        beforeMount(){
            console.log('beforeMount',this.title,document.querySelector('#title'))
        },
        // 8. 创建$el,并且执行了render函数
        // 9. mounted 可以访问数据  会触发update函数执行 标志着初始阶段的完成
        mounted(){
            this.title='biubiubiu'
            console.log('mounted',this.title,document.querySelector('#title'))

            this.time = setInterval(()=>{
                this.num++
            },1000)
        },
        // 10. 当数据改变时 进入运行中
        // 11. 执行beforeUpdate, 数据已经更新了,dom还没有重新渲染,得到的dom是之前的dom 没有什么用,不能操作数据(死循环),dom也没有操作的必要
        beforeUpdate(){
            console.log('beforeUpdate',document.querySelector('#title').innerHTML)
        },
         // 12. setter => watcher -> 创建新的虚拟dom -> diff对比 -> rerender
        updated () {
            // 13. 执行updated dom重新渲染完成, 作用,可以操作重新渲染之后的dom 不能操作数据(死循环)
            console.log('updated', document.querySelector('#title'))
        },
        // 14. 调用vm.$destroy()的时候执行
        // 15. 执行beforeDestroy, 此时还没有销毁,善后.....取消一些事件监听,解绑某些dom的事件
        beforeDestroy(){
            console.log('beforeDestroy', document.querySelector('#title'))
        },
        // 16. 取消所有的监听!数据监听/事件监听。。。。
        destroyed () {
            // 16. 执行destroyed 作用和beforeDestroy一样
            this.time = null
            console.log('destroyed',this.num, document.querySelector('#title'))
        }
    })
   
    new Vue({
        el:'#app',
        data:{
            message:'vue 的生命周期'
        },
        
    })

最后在总结一下:一共有8个钩子函数

beforeCreate 没什么用 数据没有挂载 dom也未渲染

created 和 beforeMount 相似 数据已经挂载 但dom还未渲染 通常用来做数据的初始化 并且不会影响生命周期中其它钩子函数的执行

mounted  可以操作数据 dom已经渲染完成 会触发update函数执行 标志着初始阶段的完成、

beforeUpdate 数据改动后触发的函数 所以不能修改数据 会造成死循环 dom也未更新渲染 所以也没什么用

update dom渲染完成 通常用来操作数据更改后的dom 也不能操作数据

beforeDestroy vm.$destroy()的时候执行 实例被销毁之前触发的函数 取消一些事件监听,解绑某些dom的事件

destroy  实例已经被销毁 取消所有的监听!数据监听/事件监听。。。。

 

=> react的生命周期

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值