【Vue】Vue的生命周期
Vue的生命周期指的是 Vue 实例从创建到销毁的整个过程。这个过程可以分为以下几个阶段:
1. 创建前阶段 (beforeCreate):
在实例初始化后执行,此时的数据监听和事件绑定机制都未完成,因此无法访问DOM节点。
说明:在这个阶段,数据是获取不到的,并且真实dom元素也是没有渲染出来的
2. 创建后阶段 (created):
Vue实例已经创建,数据侦听、计算属性、方法、事件/侦听器的回调函数已配置完毕,但挂载阶段还没开始,仍然无法获取到DOM元素。适合进行异步请求等操作。
说明:在这个阶段,可以访问到数据了,但是页面当中真实dom节点还是没有渲染出来,在这个钩子函数里面,可以进行相关初始化事件的绑定、发送请求操作
3. 挂载前阶段 (beforeMount):
完成了DOM的初始化,但仍然无法获取到具体的DOM元素,因为Vue还没有进行根节点挂载。这个阶段是过渡性的,在项目中使用得比较少。
说明:代表dom马上就要被渲染出来了,但是却还没有真正的渲染出来,这个钩子函数与created钩子函数用法基本一致,可以进行相关初始化事件的绑定、发送ajax操作
4. 挂载后阶段 (mounted):
实例已经被挂载完成了,可以获取到数据和DOM元素了。在这个阶段,视图的数据和DOM元素的数据已经保持同步。
说明:mounted 不会保证所有的子组件也都被挂载完成。如果你希望等到整个视图都渲染完毕再执行某些操作,可以在 mounted 内部使用 vm.$nextTick。
挂载阶段的最后一个钩子函数,数据挂载完毕,真实dom元素也已经渲染完成了,这个钩子函数内部可以做一些实例化相关的操作
5. 更新前阶段 (beforeUpdate):
在数据发生改变,但页面还没有完成更新时执行的操作。适合在现有DOM将要被更新之前访问它。
说明:这个钩子函数初始化的不会执行,当组件挂载完毕的时候,并且当数据改变的时候,才会立马执行,这个钩子函数获取dom的内容是更新之前的内容
6. 更新后阶段 (updated):
当实例的内容被更新以后,渲染完毕页面会执行这个钩子函数。
说明:这个钩子函数获取dom的内容是更新之后的内容生成新的虚拟dom,新的虚拟dom与之前的虚拟dom进行比对,差异之后,就会进行真实dom渲染。在updated钩子函数里面就可以获取到因diff算法比较差异得出来的真实dom渲染了。
7. 销毁前阶段 (beforeDestroy):
准备销毁当前实例之前执行的操作。在这个阶段,data和methods方法都能用,但还没有完全销毁。
说明:当组件销毁的时候,就会触发这个钩子函数代表销毁之前,可以做一些善后操作,可以清除一些初始化事件、定时器相关的东西。
8. 销毁后阶段 (destroyed):
当销毁完毕这个实例了,那么会执行一遍这个钩子函数,然后整个Vue生命周期结束。在这个阶段,所有的东西已经解绑。
说明:Vue实例失去活性,完全丧失功能
在Vue的生命周期中,我们可以使用生命周期钩子函数来定义在特定时候执行的代码。这些钩子函数会自动绑定this上下文到实例中,因此不能使用箭头函数来定义生命周期方法,以避免this指向的问题。
<template> <div id="app"> <p id="box">{{msg}}</p> <button @click="change">更新</button> </div> </template> <script> export default { data () { return { msg: 'hello' } }, methods: { change () { this.msg = 'hello world' } }, beforeCreate () { console.log('---------------->beforeCreate') console.log(this.msg, document.getElementById('box')) }, created () { console.log('---------------->created') console.log(this.msg, document.getElementById('box')) }, beforeMount () { console.log('---------------->beforeMount') console.log(this.msg, document.getElementById('box')) }, mounted () { console.log('---------------->mounted') console.log(this.msg, document.getElementById('box')) }, beforeUpdate () { console.log('---------------->beforeUpdate') console.log(this.$el.innerHTML) console.log(this.msg, document.getElementById('box')) }, updated () { console.log('---------------->updated') console.log(this.$el.innerHTML) console.log(this.msg, document.getElementById('box')) } } </script>
当数据改变之后又会触发beforeUpdate,updated两个钩子函数
猜你喜欢
- 【Vue】Vue 前后端分离部署方案
- 方案 1:Docker创建两个 Docker 容器,一个用于后端,一个用于前端。在后端容器中运行 API 代码。在前端容器中运行 Vue 应用程序并将其打包为静态文件(如 HTML、CSS 和 JS)。方案 2:Nginx 代理安装 Nginx Web 服务器作为反向代理。将后端 API 路由到 Nginx。Nginx 将前端静态文件提供给客户端。方案 3:Node Express使用 Node Express 作为后端框架,它可以将静态文件与 API 路由一起托管。在 Express 应用程序
- 【VUE】Vue3+Vite+TypeScript常用项目模块详解
- 目录1.Vue3+Vite+TypeScript 概述1.1 vue3 1.1.1 Vue3 概述1.1.2 vue3的现状与发展趋势1.2 Vite1.2.1 现实问题1.2 搭建vite项目1.3 TypeScript1.3.1 TypeScript 定义1.3.2 TypeScript 基本数据类型 1.3.3 TypeScript语法简单介绍2. 项目配置简单概述2.1 eslint 校验代码工具配置2.1.1 eslint定义2.1
- 【Vue】Vue中对axios进行封装的最佳实践
- vue是当前前端开发中最常用的框架之一,而ajax请求又是前端开发中非常关键的一环。为了方便开发者使用,vue社区中出现了许多对ajax请求库axios进行封装的实践。本文将介绍vue中对axios进行封装的最佳实践,帮助您更好地理解如何在vue项目中使用axios。封装axios在Vue项目中,我们需要把axios进行封装以方便使用。这里介绍一个标准的axios封装:import axios from 'axios' import sto
- 【Vue】Vue3 开发实战分享——打印插件 Print.js 的使用(Vue3 + Nodejs + Print.js 实战)以及 el-table 与 el-pagination 的深入使用(下)
- 文章目录📋前情回顾&前言🎯关于 el-table1️⃣获取每行对应的内容数据2️⃣行内数据判断处理(过滤)3️⃣对表格内容的索引🧩项目中延申使用🎯关于 el-pagination1️⃣显示总条数与分页展示2️⃣跳转页和页码样式3️⃣设置为中文🧩项目中延申使用📝最后📋前情回顾&前言上一篇文章(Vue3 开发实战分享——打印插件 Print.js 的使用(Vue3 + Nodejs + Print.js 实战)以及 el-table 与 el-pagination 的深
- 【Vue】Vue刷新页面的7中方法总结
- vue使用中经常会用到刷新当前页面,下面总结一下几种常用的刷新方法,供大家参考。1、 使用 location.reload() 方法进行页面刷新使用 location.reload() 方法可以简单地实现当前页面的刷新,这个方法会重新加载当前页面,类似于用户点击浏览器的刷新按钮。在 Vue 中,可以将该方法绑定到 Vue 实例上,比如在 Vue 的 methods 中添加如下的方法:methods: { refresh() { &n
- 【Vue】vue3比vue2好在哪里
- vue 3 优于 vue 2 的关键优势包括:性能提升:响应式系统重写,优化更新速度虚拟 dom 优化,提高渲染效率代码组织和可维护性:组合式 api,提升可维护性teleport 和 suspense,提高代码灵活性和可读性开发者体验:更好的调试工具,简化调试过程typescript 2.7 支持,增强代码提示和类型检查Vue 3 与 Vue 2 的优势对比核心性能提升响应式系统重写:Vue 3 引入 Reactivity API,优化了响应式系统的性能,提升了更新速度。虚拟 DOM 优化:采
- 【Vue】vue是什么模式的前端框架
- vue 中的 mvvm 架构将应用程序分为 model、view 和 viewmodel:model:包含数据和业务逻辑,独立于视图。view:显示 model 中的数据,使用模板语法进行数据绑定。viewmodel:model 和 view 之间的桥梁,包含与 view 交互的数据和方法,并更新 view。mvvm 在 vue 中的优势包括响应式数据绑定、代码可重用性、提高生产力、易于调试。Vue:MVVM 架构什么是 MVVM?MVVM(Model-View-ViewModel)是一种软件设
- 【Vue】Vue定义全局变量的方法
- 在Vue项目中我们需要使用许多的变量来维护数据的流向和状态,这些变量可以是本地变量、组件变量、父子组件变量等,但这些变量都是有局限性的。在一些场景中,可能需要在多个组件中共享某个变量,此时全局变量就派上了用场。定义全局变量的方法1. 使用Vue.prototype定义全局变量通过在 vue 的原型上定义属性,可以在所有组件中访问该属性。在main.js定义全局变量// main.jsVue.prototype.baseUrl = "https://www.example.com/api