Vue2,Vue3 两者生命周期有什么不同
时间: 2023-06-05 14:04:25 浏览: 102
Vue2 和 Vue3 的生命周期在基本结构上是相同的,但是 Vue3 引入了 Composition API,它使用 setup 函数而不是 Vue2 中的 created 和 mounted 函数来组织逻辑,这可以使代码更加简洁、可重用。同时,Vue3 中的生命周期钩子函数变得更加灵活,例如 beforeMount 和 mounted 等生命周期钩子可以通过 onBeforeMount 和 onMounted 等函数来替换。此外,Vue3 中还引入了新的生命周期函数(如 onBeforeUnmount和 onUpdated),以更好地支持 Reactivtive API。
相关问题
uniapp中的生命周期和vue3的生命周期执行时间
uniApp 和 Vue 3 都有其自身的生命周期管理机制,但它们在细节上有所不同。
**Vue 3 生命周期执行时间:**
Vue 3 提供了更为简洁的生命周期结构,主要包括以下几个阶段:
1. **BeforeCreate**: 在实例创建之前执行,此时模板已加载但还未渲染。
2. **Created**: 实例已经完全创建并挂载到 DOM 上。
3. **BeforeMount**: 实例开始挂载到真实的 DOM 元素,但 DOM 结构尚未插入文档。
4. **Mounted**: 模板已全部挂载完成,并且所有的子组件也都挂载完毕。
5. **BeforeUpdate**: 调度数据更新检测过程前执行,但DOM不会被更新。
6. **Updated**: 数据更新后,DOM 已经更新完成。
7. **BeforeDestroy**: 组件准备卸载时调用,但DOM依然存在。
8. **Destroyed**: 组件已卸载,相关的DOM元素从文档中移除。
**uniApp 生命周期执行时间:**
uniApp 的生命周期更偏向于小程序和H5环境,主要有以下阶段:
1. **created**: 类似于 Vue 3 的 Created,但发生在整个页面创建完成后。
2. **mounted**: 页面或者组件完全渲染完成并且挂载到了真实 DOM。
3. **updated**: 数据更新导致视图重新渲染。
4. **beforeunload**: 页面即将关闭或路由切换前调用。
5. **destroyed**: 页面或组件卸载前调用,资源释放等清理工作在这里进行。
两者共同点在于都是在特定阶段进行特定操作,区别在于Vue 3 更注重纯粹的前端框架生命周期,而uniApp结合了多种平台的需求,因此在某些环节可能会有额外的处理。
window.onload和vue2生命周期
### 关于 `window.onload` 与 Vue 2 生命周期钩子
#### window.onload 特性
`window.onload` 是浏览器原生事件处理程序之一,当整个网页(包括图像、脚本文件和其他资源)完全加载完毕后触发。这表示所有依赖这些资源的功能只有在此之后才可安全调用[^3]。
#### Vue 2 的生命周期概述
Vue 实例遵循特定的生命周期顺序创建并挂载至DOM节点上;在这个过程中会经历多个阶段,并允许开发者通过不同的钩子函数来介入各个关键时刻。例如,在组件渲染完成后可以通过 `mounted()` 钩子访问真实的 DOM 元素[^1]。
#### 主要差异对比
| 对比项 | Window.onload | Vue Lifecycle (Mounted Hook) |
| --- | --- | --- |
| **触发时机** | 页面内所有静态资源加载完成时触发一次 | 组件实例化并且其模板编译好插入到页面中时触发 |
| **作用范围** | 整个HTML文档级别 | 单个Vue组件内部 |
| **执行环境** | 浏览器全局上下文中运行 | Vue实例的方法和属性环境中 |
对于 `window.onload`, 它会在所有的外部资源都被下载解析后再去执行指定的任务, 这可能会造成延迟响应用户交互的情况发生。而相比之下,Vue提供了更加细粒度控制能力——即可以在单个组件准备就绪的时候立即采取行动而不必等待整页加载结束[^5]。
另外值得注意的是,虽然两者都可以用来确保某些逻辑只在DOM可用的情况下被执行,但是它们的应用场景有所不同:前者适用于那些确实需要等到全部内容都准备好再启动的操作(比如图表绘制),后者则更适合用于增强现有标记结构或与其他库集成等局部更新需求。
```javascript
// 使用 window.onload 方式
window.onload = function() {
console.log('All resources are loaded');
};
// 使用 Vue lifecycle hook 方式
new Vue({
el: '#app',
mounted() {
console.log('Component is ready and inserted into the document.');
}
});
```
阅读全文