对Vue生命周期简单的理解

本文详细介绍了Vue.js的生命周期,包括从创建实例到销毁的各个阶段。关键阶段如beforeCreate、created、beforeMount、mounted等被逐一解释,并说明了它们的用途及应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

生命周期    找错误  解决需求

new Vue()   实例vue对象
init Event & Lifecycle

beforeCreate()  没有创建对象之前就拥有的个方法
可以执行logind

init injections & reactivity

created() 组件被创建好了    属性也成功的被绑定了    dom还没有生成
在此方法中 可以从服务端获取初始化页面需要的数据    

Has `el` option 
判断是否有 element  例如el:'#app'

No when vm.$mount(el) is called
或者在 new Vue 最后面有 .$mount("#app") 也可以
如果两者都没有  至此生命周期结束

Yes
`template` option 
有 element 再检查是否有template

Yes
Compile template into render function 
有组件 或者html内容 
执行 render渲染 组件中的内容

No Compile el`s outerHtml as template 
如果两者都没有  至此生命周期也结束了

beforeMount()
挂载    开始编译template中的内容    在虚拟dom中执行的
此方法没有将真实的内容渲染到页面上去
此方法可以用来做一些基础的工作

Create vm.$el and replace 'el' with it

mounted()
模板已经编译完成 开始挂载   此方法结束  页面就显示出来了
如果有操作时要在页面加载出来之后执行的
可以写在此方法当中

Mounted 

when data changes 

以下方法执行的是 页面的增删改查
beforeUpdate()
组件更新之前    执行的函数


Virtual Dom and patch

updated()
组件更新之后    此方法执行完页面就展示

when vm.$destroy()

beforeDestroy()
销毁之前

Teardown watchers, child components and event listeners

destroyed()
销毁之后

Destroyed

 

### Vue.js 生命周期详解 Vue.js 提供了一系列的生命周期钩子函数,使开发者能够在组件的不同阶段执行特定的操作。以下是关于 Vue.js 生命周期的详细解释。 #### 1. **初始化阶段** 当一个新的 Vue 实例被创建时,会依次经历以下几个阶段: - **beforeCreate**: 在实例初始化之后立即调用。此时,实例上的数据观察 (data observer)、计算属性、方法和事件/侦听器配置都还没有初始化[^5]。 - **created**: 在实例创建完成后调用。此时,已经完成了响应式数据的绑定,但尚未挂载到 DOM 上。在这个阶段可以进行一些初始数据的获取工作,例如发起 AJAX 请求[^2]。 #### 2. **模板编译与挂载阶段** 接下来进入模板编译和挂载阶段: - **beforeMount**: 在挂载开始之前被调用。相关的 render 函数首次被调用。此时模板已经被成功编译成虚拟 DOM 并准备挂载至页面上,但是还未真正挂载到实际的 DOM 中[^3]。 - **mounted**: 当实例被挂载后调用。此时,Vue 已经将编译好的虚拟 DOM 插入到了真实 DOM 中,用户可以看到最终呈现出来的界面。这是一个非常适合用来操作 DOM 或者启动动画的时间点[^4]。 #### 3. **更新阶段** 当数据发生改变引起视图重新渲染时,会触发以下两个钩子: - **beforeUpdate**: 数据更新前调用。此时虚拟 DOM 尚未重新渲染,旧的 DOM 仍然存在[^5]。 - **updated**: 数据更新完毕且新的 DOM 渲染完成之后调用。需要注意的是,在此期间可能会因为多次状态变更而导致额外的开销,应谨慎处理以防止潜在的死循环问题[^2]。 #### 4. **销毁阶段** 最后是销毁阶段,涉及清除所有绑定的监听器以及解除对子组件的管理等操作: - **beforeDestroy**: 销毁实例之前的回调函数。在此阶段,实例仍然是完全可用的状态,可以做一些清理工作的预处理[^3]。 - **destroyed**: 执行完该钩子后,Vue 实例指示的所有东西都会解绑,所有的事件监听器也会移除,子组件也都被销毁[^4]。 --- #### 示例代码 下面给出一段简单示例来展示部分生命周期钩子的实际应用情况: ```javascript new Vue({ el: '#app', data() { return { count: 0 }; }, beforeCreate() { console.log('Before Create'); }, created() { console.log('Created'); }, beforeMount() { console.log('Before Mount'); }, mounted() { console.log('Mounted'); }, methods: { increment() { this.count += 1; } }, watch: { count(newVal, oldVal){ console.log(`Count changed from ${oldVal} to ${newVal}`); } }, destroyed(){ console.log('Destroyed'); } }); ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值