自学内容网 自学内容网

vue生命周期 (创建阶段 | 挂载阶段 | 更新阶段 | 销毁阶段 )

Vue的生命周期是指一个Vue组件从创建、挂载、更新到销毁的过程。在这个过程中,Vue提供了一系列的生命周期钩子函数,允许开发者在组件的特定阶段执行自定义的逻辑。

在Vue 2中,生命周期钩子函数通常是在组件选项中以方法的形式定义的。主要包括以下几个阶段:

创建阶段:

beforeCreate:在实例初始化之后,数据观测(data和props的初始化)之前被调用。此时无法访问data、computed、methods等属性。
created:在实例创建完成后被调用,此时组件实例已完成数据观测,但是DOM元素还未生成,因此无法访问到$el。适合执行一些初始化操作,如异步请求数据、对数据的进一步处理,或者在组件创建完成后进行一些操作,如设置定时器、监听事件等。

   <div id="app">
        <div>{{msg}}</div>
        <input type="button" value="更新" @click="update" />
        <input type="button" value="销毁" @click="destroy" />

    </div>

    <script type="text/javascript">
        var vm = new Vue({
            el: '#app',
            data: {
                msg: 'hello world'


            },
            methods: {
                update: function() {
                    this.msg = 'hello';
                    console.log('更新');

                },
                destroy: function() {
                    this.$distroy;
                    console.log('销毁');

                }
            },
            beforeCreate: function() {
                console.log('beforeCreate');
            },
            created: function() {
                console.log('created');
            },
            beforeMount: function() {
                console.log('beforeMount');
            },
            mounted: function() {
                console.log('mounted');
            },
            beforeUpdate: function() {
                console.log('beforeUpdate');
            },
            updated: function() {
                console.log('updated');
            },
            beforeDestroy: function() {
                console.log('beforeDestroy');
            },
            destroyed: function() {
                console.log('destroyed');
            }
        })
    </script>


## 挂载阶段:
beforeMount:在挂载开始之前被调用,相关的render函数首次被调用,但此时还未生成DOM。
mounted:在挂载完成后被调用,此时组件的DOM已经渲染完成,可以安全地访问DOM元素和进行DOM操作。
   <div id="app">
        <div>{{msg}}</div>
        <input type="button" value="更新" @click="update" />
        <input type="button" value="销毁" @click="destroy" />

    </div>

    <script type="text/javascript">
        var vm = new Vue({
            el: '#app',
            data: {
                msg: 'hello world'


            },
            methods: {
                update: function() {
                    this.msg = 'hello';
                    console.log('更新');

                },
                destroy: function() {
                    this.$distroy;
                    console.log('销毁');

                }
            },
            beforeCreate: function() {
                console.log('beforeCreate');
            },
            created: function() {
                console.log('created');
            },
            beforeMount: function() {
                console.log('beforeMount');
            },
            mounted: function() {
                console.log('mounted');
            },
            beforeUpdate: function() {
                console.log('beforeUpdate');
            },
            updated: function() {
                console.log('updated');
            },
            beforeDestroy: function() {
                console.log('beforeDestroy');
            },
            destroyed: function() {
                console.log('destroyed');
            }
        })
    </script>

## 更新阶段:
beforeUpdate:在组件即将因为一个响应式状态变更而更新其DOM树之前调用。这个钩子可以用来在Vue更新DOM之前访问DOM状态。
updated:在组件因为一个响应式状态变更而更新其DOM树之后调用。这个钩子通常用于执行依赖于DOM的更新操作。


   <div id="app">
        <div>{{msg}}</div>
        <input type="button" value="更新" @click="update" />
        <input type="button" value="销毁" @click="destroy" />

    </div>

    <script type="text/javascript">
        var vm = new Vue({
            el: '#app',
            data: {
                msg: 'hello world'


            },
            methods: {
                update: function() {
                    this.msg = 'hello';
                    console.log('更新');

                },
            },
            beforeCreate: function() {
                console.log('beforeCreate');
            },
            created: function() {
                console.log('created');
            },
            beforeMount: function() {
                console.log('beforeMount');
            },
            mounted: function() {
                console.log('mounted');
            },
            beforeUpdate: function() {
                console.log('beforeUpdate');
            },
            updated: function() {
                console.log('updated');
            },
            beforeDestroy: function() {
                console.log('beforeDestroy');
            },
            destroyed: function() {
                console.log('destroyed');
            }
        })

销毁阶段:

beforeDestroy:在组件实例被销毁之前调用。此时,组件实例仍然保有全部功能,但即将被销毁。可以在这个钩子中进行一些清理操作,如取消事件监听器和定时器。
destroyed:在组件实例被销毁之后调用。此时,组件实例的所有指令都被解除绑定,所有事件侦听器都被移除,所有子组件实例被卸载。可以在这个钩子中进行最终的清理工作。
此外,Vue 2还提供了keep-alive包裹的组件在切换时不会进行销毁,而是缓存到内存中并执行deactivated钩子函数,命中缓存渲染后会执行activated钩子函数。

            methods: {
                    destroy: function() {
                    this.$destroy();
                    console.log('销毁');

                }

原文地址:https://blog.csdn.net/zhouyuqin01/article/details/143891809

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!