分享好友 前端技术首页 频道列表

Vue生命周期 vue生命周期几个阶段

vue  2023-03-08 21:470

官网解释

一、Vue的生命周期

Vue 实例有⼀个完整的⽣命周期,也就是从开始创建、初始化数据、编译模版、挂载Dom -> 渲染、更新 -> 渲染、卸载 等⼀系列过程,称这是Vue的⽣命周期。

Vue2生命周期

1.beforeCreate(创建前)

  • 数据观测和初始化事件还未开始,此时 data 的响应式追踪、event/watcher 都还没有被设置,也就是说不能访问到data、computed、watch、methods上的方法和数据。

2.created(创建后)

  • 实例创建完成,实例上配置的 options 包括 data、computed、watch、methods 等都配置完成,可以访问data数据以及methods方法,但是此时渲染得节点还未挂载到 DOM,所以不能访问到 $el 属性(vm实例身上)。

3.beforeMount(挂载前)

  • 在挂载开始之前被调用,相关的render函数首次被调用。实例已完成以下的配置:编译模板,把data里面的数据和模板生成html。此时还没有挂载html到页面上,虚拟DOM生成,此时页面渲染的是未经vue编译的DOM结构。

4.mounted(挂载后)

  • 在el被新创建的 vm.$el 替换,并挂载到实例上去之后调用。实例已完成以下的配置:用上面编译好的html内容替换el属性指向的DOM对象。完成模板中的html渲染到html 页面中。

5.beforeUpdate(更新前)

  • 响应式数据更新时调用,此时虽然响应式数据更新了,但是对应的真实 DOM 还没有被渲染。

6.updated(更新后)

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

7.beforeDestroy(销毁前)

  • 实例销毁之前调用。这一步,实例仍然完全可用,this 仍能获取到实例。

8.destroyed(销毁后)

  • 实例销毁后调用,调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。该钩子在服务端渲染期间不被调用。

Vue2与Vue3生命周期区别

二、Vue 子组件和父组件执行顺序

1.加载渲染过程

  1. 父组件 beforeCreate
  2. 父组件 created
  3. 父组件 beforeMount
  4. 子组件 beforeCreate
  5. 子组件 created
  6. 子组件 beforeMount
  7. 子组件 mounted
  8. 父组件 mounted

2.更新过程

  1. 父组件 beforeUpdate
  2. 子组件 beforeUpdate
  3. 子组件 updated
  4. 父组件 updated

3.销毁过程

  1. 父组件 beforeDestroy
  2. 子组件 beforeDestroy
  3. 子组件 destroyed
  4. 父组件 destoryed

三、created和mounted的区别

  • created
    • 在模板渲染成html前调用,即通常初始化某些属性值,然后再渲染成视图,此时可以访问到data数据及methods中的方法等。
  • mounted
    • 在模板渲染成html后调用,通常是初始化页面完成后,再对html的dom节点进行一些需要的操作(尽量避免),至此初始化过程结束,一般在此阶段会发送ajax请求,开启定时器、绑定自定义事件,订阅消息等初始化操作。

四、一般在哪个生命周期请求异步数据

  • 我们可以在钩子函数 created、beforeMount、mounted 中进行调用,因为在这三个钩子函数中,data 已经创建,可以将服务端端返回的数据进行赋值。推荐在 **created **钩子函数中调用异步请求,因为在 created 钩子函数中调用异步请求有以下优点
    • 能更快获取到服务端数据,减少页面加载时间,用户体验更好
    • SSR不支持 beforeMount 、mounted 钩子函数,放在 created 中有助于一致性

五、keep-alive 中的生命周期

  • keep-alive是 Vue 提供的一个内置组件,用来对组件进行缓存——在组件切换过程中将状态保留在内存中,防止重复渲染DOM。
  • 如果为一个组件包裹了 keep-alive,那么它会多出两个生命周期:deactivatedactivated。同时,beforeDestroy 和 destroyed 就不会再被触发了,因为组件不会被真正销毁。
  • 当组件被换掉时,会被缓存到内存中、触发 deactivated 生命周期;当组件被切回来时,再去缓存里找这个组件、触发 activated钩子函数。

查看更多关于【vue】的文章

展开全文
相关推荐
反对 0
举报 0
评论 0
图文资讯
热门推荐
优选好物
更多热点专题
更多推荐文章
vue3+TS 自定义指令:长按触发绑定的函数
vue3+TS 自定义指令:长按触发绑定的函数而然间看到一个在vue2中写的长按触发事件的自定义指定,想着能不能把他copy到我的vue3项目中呢。编写自定义指令时遇到的几个难点1.自定义指令的类型在ts中写任何东西都要考虑到类型的问题,自定义指令的类型问题依然存

0评论2023-03-08326

基于ZR.VUE 前端的改造,页面刷新报错
 问题描述:前后端分离开发,分开部署. 页面刷新 直接报404 错误的解决办法提示:  先在 .env.development 中 配置 VUE_APP_BASE_API , 将 '/' 替换为 后端地址 'http://localhost:8888/'如果是对应的发布的正式环境,也要修改  .env.production 的VUE_APP_

0评论2023-03-08677

Vue3 企业级优雅实战 - 组件库框架 - 9 实现组件库 cli - 上
上文搭建了组件库 cli 的基础架子,实现了创建组件时的用户交互,但遗留了 cli/src/command/create-component.ts 中的 createNewComponent 函数,该函数要实现的功能就是上文开篇提到的 —— 创建一个组件的完整步骤。本文咱们就依次实现那些步骤。(友情提示

0评论2023-03-08947

vue-3 this概念
一、this概念官方是这样说的:在 setup()内部,this 不会是该活跃实例的引用因为 setup() 是在解析其它组件选项之前被调用的,所以 setup() 内部的 this 的行为与其它选项中的 this 完全不同这在和其它选项式 API 一起使用 setup() 时可能会导致混淆啥意思呢

0评论2023-03-08538

Vue3+TypeScript 项目中,配置 ESLint 和 Prettier
接上篇:从0搭建vite-vue3-ts项目框架:配置less+svg+pinia+vant+axios文档同步项目gitee:https://gitee.com/lixin_ajax/vue3-vite-ts-pinia-vant-less.git 一、Eslint:用于检测代码安装eslint相关依赖yarn add eslint eslint-plugin-vue @typescript-esli

0评论2023-03-08825

Vue中四种操作dom方法保姆级讲解 vue中如何操作dom
目录前言一、通过ref拿到dom的引用适用场景示例代码二、通过父容器的ref遍历拿到dom引用适用场景示例代码三、通过子组件emit传递ref适用场景示例代码四、通过:ref将dom引用放到数组中适用场景示例代码前言最近主管提出了许多优化用户体验的要求,其中很多涉及

0评论2023-03-08944

Vue状态管理工具Vuex工作原理解析 vuex五种状态
目录一、什么是vuex二、vuex的工作方式三、vuex的使用场景四、工作流程五、vuex的核心API六、应用七、vuex的工作流程一、什么是vuexVuex是vue项目的状态管理器(状态管理工具)。vue项目的状态是通过vue实例(组件)绑定的变量来体现。所以也可以说vuex是用来管理

0评论2023-03-08859

更多推荐