vue生命周期

4 阅读2分钟

vue2生命周期:

init

构建vue环境

beforeCreated

实例初始化之后,数据观测(data observer) 和 event/watcher 事件配置之前。无法访问data,method。el(vue实例) 和 template 尚未处理。使用场景:

  1. 初始化非响应式数据:设置一些不需要响应式的实例属性
  2. 全局事件总线初始化:在根实例中初始化事件总线
  3. 加载动画展示:在数据加载前显示 loading

created

实例创建完成后立即调用,可以访问data、method,但是不能访问vue实例($el)。使用场景:

  1. 数据请求:在这里调用 API 获取初始化数据
  2. 非 DOM 操作:设置定时器、订阅事件
  3. 修改初始数据:对 props 进行转换处理

beforeMounte

模板编译完成,即将首次渲染。所有资源均可调用。但是没有挂载依然无法访问vue实例$el。使用场景:

  1. 最后一次数据修改:在渲染前修改数据的最后机会
  2. 服务端渲染特殊处理:区分客户端和服务端逻辑
  3. 手动挂载准备:准备手动挂载的一些条件

mounted

挂载到dom完成,可以访问vue实例。使用场景

  1. 操作真实 DOM:初始化第三方库(ECharts、Swper、Map)
  2. 访问 DOM 元素:通过 $refs 操作子组件或 DOM 元素
  3. 添加事件监听:添加 window 滚动监听、resize 事件
  4. 获取设备信息:获取正在使用的机型,获取当前使用的浏览器类型和版本

beforeUpdate

数据变化后,DOM 更新前。避免在这里修改数据,可能导致无限循环。使用场景:

  1. 获取更新前的状态:保存旧数据用于对比
  2. 手动移除监听:在 DOM 更新前清理一些东西
  3. 计算属性替代:有些逻辑不适合放在 computed 中

updated

数据变化导致 DOM 重新渲染后。使用场景:

  1. DOM 依赖更新:图表尺寸随容器变化而 resize
  2. 日志记录:记录数据变更日志
  3. 第三方库数据同步:如富文本编辑器内容同步

beforeDestory

实例销毁前调用,$el依然可以访问和调用。使用场景:

  1. 清理事件监听:移除 window/document 的事件监听
  2. 清除定时器:清理 setInterval/setTimeout
  3. 销毁第三方实例:销毁 ECharts、地图实例等

destory

实例销毁后调用。使用场景:

  1. 最后清理确认:确认资源已释放
  2. 通知父组件:向父组件发送销毁事件
  3. 埋点统计:记录组件停留时长

deactivated

组件被停用时(离开缓存组件)

actived

组件被激活时(首次进入缓存组件会先触发 mounted 然后 activated),keep-alive页面一般根据比较传入的参数和当前缓存的参数做对比,如果不同则更新页面数据

使用注意事项:

  1. 异步请求放在 created 或 activated:如果组件被 keep-alive 缓存,首次请求放在 created,后续激活使用 activated
  2. DOM 操作放在 mounted:确保 DOM 已渲染完成
  3. 清理资源放在 beforeDestroy:而不是 destroyed,确保能正确访问实例
  4. 避免在 beforeUpdate/updated 中修改数据:可能导致无限循环
  5. keep-alive 组件记得清理:在 deactivated 中保存状态,activated 中恢复