vue2生命周期:
init
构建vue环境
beforeCreated
实例初始化之后,数据观测(data observer) 和 event/watcher 事件配置之前。无法访问data,method。el(vue实例) 和 template 尚未处理。使用场景:
- 初始化非响应式数据:设置一些不需要响应式的实例属性
- 全局事件总线初始化:在根实例中初始化事件总线
- 加载动画展示:在数据加载前显示 loading
created
实例创建完成后立即调用,可以访问data、method,但是不能访问vue实例($el)。使用场景:
- 数据请求:在这里调用 API 获取初始化数据
- 非 DOM 操作:设置定时器、订阅事件
- 修改初始数据:对 props 进行转换处理
beforeMounte
模板编译完成,即将首次渲染。所有资源均可调用。但是没有挂载依然无法访问vue实例$el。使用场景:
- 最后一次数据修改:在渲染前修改数据的最后机会
- 服务端渲染特殊处理:区分客户端和服务端逻辑
- 手动挂载准备:准备手动挂载的一些条件
mounted
挂载到dom完成,可以访问vue实例。使用场景
- 操作真实 DOM:初始化第三方库(ECharts、Swper、Map)
- 访问 DOM 元素:通过
$refs操作子组件或 DOM 元素 - 添加事件监听:添加 window 滚动监听、resize 事件
- 获取设备信息:获取正在使用的机型,获取当前使用的浏览器类型和版本
beforeUpdate
数据变化后,DOM 更新前。避免在这里修改数据,可能导致无限循环。使用场景:
- 获取更新前的状态:保存旧数据用于对比
- 手动移除监听:在 DOM 更新前清理一些东西
- 计算属性替代:有些逻辑不适合放在 computed 中
updated
数据变化导致 DOM 重新渲染后。使用场景:
- DOM 依赖更新:图表尺寸随容器变化而 resize
- 日志记录:记录数据变更日志
- 第三方库数据同步:如富文本编辑器内容同步
beforeDestory
实例销毁前调用,$el依然可以访问和调用。使用场景:
- 清理事件监听:移除 window/document 的事件监听
- 清除定时器:清理 setInterval/setTimeout
- 销毁第三方实例:销毁 ECharts、地图实例等
destory
实例销毁后调用。使用场景:
- 最后清理确认:确认资源已释放
- 通知父组件:向父组件发送销毁事件
- 埋点统计:记录组件停留时长
deactivated
组件被停用时(离开缓存组件)
actived
组件被激活时(首次进入缓存组件会先触发 mounted 然后 activated),keep-alive页面一般根据比较传入的参数和当前缓存的参数做对比,如果不同则更新页面数据
使用注意事项:
- 异步请求放在 created 或 activated:如果组件被 keep-alive 缓存,首次请求放在 created,后续激活使用 activated
- DOM 操作放在 mounted:确保 DOM 已渲染完成
- 清理资源放在 beforeDestroy:而不是 destroyed,确保能正确访问实例
- 避免在 beforeUpdate/updated 中修改数据:可能导致无限循环
- keep-alive 组件记得清理:在 deactivated 中保存状态,activated 中恢复