vue2.0
一、vue computed 和 watch 的区别 使用场景
computed:
- 有缓存机制、依赖项发生改变重新计算。
- 不支持异步,当computed 内部有异步操作时、无法监听数据变化
- 不需要在data里声明
- 一个属性受多个属性影响时使用
- 使用 场景:购物车结算
watch:
- 没有缓存机制,数据发生变化直接触发
- 支持异步操作
- 必须在data里声明
- 数据变化时执行异步或开销较大的操作(一条数据影响多条数据的时候)
- 使用场景:搜索、滚动锚点定位
二、vue响应式原理?详细说一下过程。
https://juejin.cn/post/6850418111985352711
三、vue的生命周期
beforeCreate是new Vue()之后触发的第一个钩子,在当前阶段data、methods、computed以及watch上的数据和方法都不能被访问。
created在实例创建完成后发生,当前阶段已经完成了数据观测,也就是可以使用数据,更改数据,在这里更改数据不会触发updated函数。可以做一些初始数据的获取,在当前阶段无法与Dom进行交互,如果非要想,可以通过vm.$nextTick来访问Dom。
beforeMount发生在挂载之前,在这之前template模板已导入渲染函数编译。而当前阶段虚拟Dom已经创建完成,即将开始渲染。在此时也可以对数据进行更改,不会触发updated。
mounted在挂载完成后发生,在当前阶段,真实的Dom挂载完毕,数据完成双向绑定,可以访问到Dom节点,使用$refs属性对Dom进行操作。
beforeUpdate发生在更新之前,也就是响应式数据发生更新,虚拟dom重新渲染之前被触发,你可以在当前阶段进行更改数据,不会造成重渲染。
updated发生在更新完成之后,当前阶段组件Dom已完成更新。要注意的是避免在此期间更改数据,因为这可能会导致无限循环的更新。
beforeDestroy发生在实例销毁之前,在当前阶段实例完全可以被使用,我们可以在这时进行善后收尾工作,比如清除计时器,销毁父组件对子组件的重复监听。beforeDestroy(){Bus.$off("saveTheme")}
destroyed发生在实例销毁之后,这个时候只剩下了dom空壳。组件已被拆解,数据绑定被卸除,监听被移出,子实例也统统被销毁。
四、父组件如何监听子组件的生命周期
- 通过$emit
![]()
- 通过@hook方式


浙公网安备 33010602011771号