1-3-vue框架-基础-vue生命周期:钩子函数,很重要

1、什么是vue生命周期?

Vue 实例从创建到销毁的过程,就是生命周期。

从开始创建、初始化数据、编译模板、挂载Dom→渲染、更新→渲染、销毁等一系列过程,称之为 Vue 的生命周期。

这个就是一个钩子函数,
在之前或者之后插入一些功能,
在此过程中,它也会运行被称为生命周期钩子的函数,让开发者有机会在特定阶段运行自己的代码。

这个和普通的方法是不一样的,普通函数是需要调用才会执行,这个生命周期函数是自动执行的,

2、vue生命周期总共有几个阶段?

总共分为8个阶段:创建前/后, 载入前/后,更新前/后,销毁前/销毁后。

2.1 挂载(初始化相关属性)

① beforeCreate(创建前):在数据观测和初始化事件还未开始。

② created(创建后):完成数据观测,属性和方法的运算,初始化事件,$el属性还没有显示出来。

③ beforeMount(载入前):在挂载开始之前被调用,相关的render函数首次被调用。实例已完成以下的配置:编译模板,data里面的数据和模板生成html。注意此时还没有挂载html到页面上。

④ mounted(载入后):在el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用。实例已完成以下的配置:用上面编译好的html内容替换el属性指向的DOM对象。完成模板中的html渲染到html页面中。此过程中进行ajax交互。

2.2 更新(元素或组件的变更操作)

⑤ beforeUpdate(更新前):在数据更新之前调用,发生在虚拟DOM重新渲染和打补丁之前。可以在该钩子中进一步地更改状态,不会触发附加的重复渲染过程。

⑥ updated(更新后):在由于数据更改导致的虚拟DOM重新渲染和打补丁之后调用。调用时,组件DOM已经更新,所以可以执行依赖于DOM的操作。然而在大多数情况下,应该避免在此期间更改状态,因为这可能会导致更新无限循环。该钩子在服务器端渲染期间不被调用。

2.3 销毁(销毁相关属性)

⑦ beforeDestroy(销毁前):在实例销毁之前调用。实例仍然完全可用。

⑧ destroyed(销毁后):在实例销毁之后调用。调用后,所有的事件监听器会被移除,所有的子实例也会被销毁。该钩子在服务器端渲染期间不被调用。

生命周期图示

vue2的生命周期
vm的一生(vm的生命周期):
    将要创建-->调用beforeCreate函数
    创建完毕-->调用created函数
    将要挂载-->调用beforeMount函数
    (重要)挂载完毕-->调用mounted函数---->重要的钩子
    将要更新-->调用beforeUpdate函数
    更新完毕-->调用updated函数
    (重要)将要销毁-->调用beforeDestory函数---->重要的钩子
    销毁完毕-->调用destoryed函数
常用的生命周期钩子:
    created:发送ajax请求、启动定时器、绑定自定义事件、订阅消息等初始化操作(最早)
    mounted:发送ajax请求、启动定时器、绑定自定义事件、订阅消息等初始化操作
    beforeDestroy:清除定时器、解绑自定义事件、取消订阅消息等收尾工作
关于销毁Vue实例:
    vm.$destroy()
    销毁后借助Vue开发者工具看不到任何信息
    销毁后自定义事件会失效,但原生DOM事件依然有效
    一般不会在beforeDestroy操作数据,因为即便操作数据,也不会再触发更新流程了

注册周期钩子​

举例来说,mounted 钩子可以用来在组件完成初始渲染并创建 DOM 节点后运行代码:

export default {
  mounted() {
    console.log(`the component is now mounted.`)
  }
}

还有其他一些钩子,会在实例生命周期的不同阶段被调用,最常用的是 mounted、updated 和 unmounted。

所有生命周期钩子函数的 this 上下文都会自动指向当前调用它的组件实例。注意:避免用箭头函数来定义生命周期钩子,因为如果这样的话你将无法在函数中通过 this 获取组件实例。

vue3的生命周期

    Vue3的生命周期:
    Vue3.0中可以继续使用Vue2.x中的生命周期钩子,但有有两个被更名:
        beforeDestroy改名为 beforeUnmount
        destroyed改名为 unmounted
    Vue3.0也提供了 Composition API(组合式API) 形式的生命周期钩子,与Vue2.x中钩子对应关系如下
        beforeCreate===>setup()
        created=======>setup()
        beforeMount ===>onBeforeMount
        mounted=======>onMounted
        beforeUpdate===>onBeforeUpdate
        updated =======>onUpdated
        beforeUnmount ==>onBeforeUnmount
        unmounted =====>onUnmounted

生命周期的示例

在组件实例初始化完成之后立即调用。

<template>
    <p>生命周期</p>
    <p>{{ message }}</p>
    <button @click="updateHandle">更新按钮</button>
</template>

<script>

export default {
    beforeCreate() {
        console.log("beforeCreate")
    },
    created() {
        console.log("created")
    },
    beforeMount() {
        console.log("beforeMount")
    },
    mounted() {
        console.log("mounted")
    },
    beforeUpdate() {
        console.log("beforeUpdate")
    },
    updated() {
        console.log("updated")
    },
    beforeUnmount() {
        console.log("beforeUnmount")
    },
    unmounted() {
        console.log("unmounted")
    },
    data(){
        return {
            message:"更新之前"
        }
    },
    methods: {
        updateHandle(){
            this.message = "更新之后"
        }
    }
}
</script>

生命周期的应用

获取dom结构

应该在什么时期最好,应该在渲染后,因为创建期,还没有dom,渲染前你也不需要,

模拟网络请求渲染数据,

这个在前后端比较常用,
我们可以在组件创建之后,去请求数据,
不能再创建前,因为之前还没有组件呢,所以组件data也没有,结构还没有出来的,

  • 现在还是有很多不理解的地方,如果深度使用?
  • 这个生命周期的内容,可以一边实践,一边学习,不需要一口气都搞懂,慢慢来,
posted @ 2021-10-28 02:46  技术改变命运Andy  阅读(48)  评论(0编辑  收藏  举报