Vue学习【3】—— Vue生命周期和生命周期函数

什么是生命周期?

Vue实例从创建到销毁的过程,叫做生命周期。
生命周期分为三个阶段:创建阶段、运行阶段、销毁阶段

什么是生命周期函数(钩子函数)

每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听、编译模板、将实例挂载到 DOM 并在数据变化时更新 DOM 等。
同时在这个过程中也会运行一些叫做生命周期钩子的函数

钩子函数有什么用

这给了用户在不同阶段添加自己的代码的机会。

举例说明Vue钩子函数

页面中写一个div

  <div id="app">
    <h3 id="h3">{{ msg }}</h3>
    <input type="button" value="修改msg" @click="msg='No'" >
  </div>

创建一个Vue实例

var  vm = new Vue({
      el : '#app',
      data : {
        msg: 'ok',
      },
      methods: {
        show () {
          console.log('执行了show方法')
        }
      },
      beforeCreate() {},
      created(){},
      beforMounte(){},
      mounted(){},
      beforUpdate(){},
      updated(){},
      beforDestroy(){},
      destroyed(){}
})
beforeCreate() {
    console.log(this.msg);   //undefined
    this.show();  //this.show is not a function
}

在beforeCreate()阶段,data和methods未被初始化
在这里插入图片描述


created() {
   //如果要使用 data 和 methods 最早只能在 create 中
   console.log(this.msg);
   this.show();
}

在 create 中,data 和 methods中的数据都初始化好了
在这里插入图片描述


beforeMount() {
  console.log(document.getElementById('h3').innerHTML);  //{{msg}}
},

模板已经在内存中编译完成,但是尚未把模板渲染到页面中,页面中的元素还没被真正替换,只是之前写的模板字符串
在这里插入图片描述


mounted() {
  // console.log(document.getElementById('h3').innerHTML);
},

内存中的模板已经真实的挂载到页面中,用户已经能看到渲染好的页面了
只要执行完了 mounted 就表示整个 Vue 实例被初始化完毕,此时组件已经脱离了创建阶段,到了运行阶段
在这里插入图片描述


//运行阶段
<input type="button" value="修改msg" @click="msg='No'" 
beforeUpdate() {
  console.log("界面内容:" + document.getElementById('h3').innerHTML);
  console.log("data中的数据:" + this.msg);
},

执行 beforeUpdate 的时候,页面数据还是旧的,但是 data 中的数据是最新的,页面尚未和最新数据同步
在这里插入图片描述


updated() {
  console.log("界面内容:" + document.getElementById('h3').innerHTML);
  console.log("data中的数据:" + this.msg);
},

updated事件执行的时候,表示页面和data数据已经保持同步了
在这里插入图片描述

创建阶段的钩子函数

beforCreate:data 和 methods中的数据都没初始化
created:data 和 methods中的数据都初始化好了,如果要使用 data 和 methods 最早只能在 create 中
beforeMount:模板已经在内存中编译完成,但是尚未把模板渲染到页面中。页面中的元素还没被真正替换,只是之前写的模板字符串
mounted:内存中的模板已经真实的挂载到页面中,用户已经能看到渲染好的页面了。mounted是实例创建期间的最后一个生命周期函数,表示实例已经被完全创建好了

运行阶段的钩子函数

beforUpdate:页面数据还是旧的,但是 data 中的数据是最新的,页面尚未和最新数据同步
updated:updated事件执行的时候,表示页面和data数据已经保持同步了

销毁阶段的钩子函数

beforDestroy
destroyed

Vue生命周期图示

在这里插入图片描述

### Vue 3 Vue 2 生命周期钩子函数的区别 在 Vue 3 中,生命周期钩子的名称行为发生了一些变化。具体来说: - `beforeDestroy` 被重命名为 `beforeUnmount`[^4]。 - `destroyed` 被重命名为 `unmounted`。 这些更改主要是为了使命名更加直观,反映组件挂载卸载的过程。除此之外,Vue 3 还引入了两个新的生命周期钩子:`setup` 钩子用于组合式 API,在组件初始化之前调用;以及 `onRenderTracked` `onRenderTriggered`,这两个钩子主要用于调试目的[^5]。 下面是 Vue 2 Vue 3 生命周期钩子的对比表: | Vue 2 Lifecycle Hooks | Vue 3 Lifecycle Hooks | |-----------------------|-----------------------| | beforeCreate | beforeCreate | | created | created | | beforeMount | beforeMount | | mounted | mounted | | beforeUpdate | beforeUpdate | | updated | updated | | activated | activated | | deactivated | deactivated | | beforeDestroy | beforeUnmount | | destroyed | unmounted | | errorCaptured | errorCaptured | 此外,Vue 3 提供了一种更灵活的方式来处理生命周期钩子——即通过 Composition API 来替代传统的 Options API。Composition API 允许开发者更好地组织逻辑,并且可以更容易地复用代码片段。 ```javascript // 使用 Composition API (Vue 3) import { onMounted, onUnmounted } from &#39;vue&#39;; export default { setup() { onMounted(() => { console.log(&#39;Component is now mounted.&#39;); }); onUnmounted(() => { console.log(&#39;Component will be unmounted.&#39;); }); return {}; } } ``` 以上展示了如何利用 Composition API 在 Vue 3 中定义生命周期钩子的方法。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值