目录
vue的响应式原理
路由跳转与拦截
vue2和vue3的生命周期
watch和computed的区别
vue的响应式原理
数据变更,视图自动更新
使用Object.defineProperty()方法来监听属性的变化,实现双向数据绑定。Object.defineProperty()方法可以控制对象的属性访问权限,实现响应式原理,当定义一个响应式属性时,Vue将使用Object.defineProperty()方法绑定该属性的getter和setter方法到一个观察者对象。当有任何对属性的更改时,它将触发setter方法,然后执行相应的更新操作。
当对数组进行操作(如push、pop、shift、unshift、splice、sort、reverse等)时,Vue能够捕获到这些变化,并触发视图的更新
对数组进行以下操作时,Vue无法自动触发更新:
1.通过索引直接修改数组元素的值:this.items[index] = newValue
2.修改数组的长度:this.items.length = newLength
当我们修改对象的属性值时,Vue能够捕获到这个变化并触发更新。这是因为Vue在对象上使用了Object.defineProperty来重写属性的访问器(getter和setter),从而能够追踪对象属性的变化。
如果要在响应式对象上添加新的属性,使用$set让新添加的属性也具有响应性
vue2.x的响应式
对象类型:通过Object.defineProperty()对属性的读取、修改进行拦截(数据劫持)。
数组类型:通过重写更新数组的一系列方法来实现拦截。(对数组的变更方法进行了包裹)。
存在问题:
新增属性、删除属性, 界面不会更新。
直接通过下标修改数组, 界面不会自动更新。
Vue3.0的响应式
实现原理:
通过Proxy(代理): 拦截对象中任意属性的变化, 包括:属性值的读写、属性的添加、属性的删除等。
通过Reflect(反射): 对源对象的属性进行操作。
路由跳转与拦截
拦截:判断token是否存在
token的保存:后端存,后端接口让浏览器把token放cookie里,前端调取token判断使用
vue2和vue3的生命周期
setup取代created,beforecreated
beforeCreate
-> 使用setup()
created
-> 使用setup()
beforeMount
->onBeforeMount
mounted
->onMounted
beforeUpdate
->onBeforeUpdate
updated
->onUpdated
beforeDestroy
->onBeforeUnmount
destroyed
->onUnmounted
watch和computed的区别
监听数据的变化
watch不支持缓存,支持异步,监听函数有两个参数,第一个参数是最新的值,第二个参数是输入之前的值
computed计算属性会缓存数据结果,只有依赖性数据改变才会重新计算,在computed中的,属性都有一个 get 和一个 set 方法,当数据变化时,调用 set 方法,如果 computed 属性值是函数,那么默认会走 get 方法,必须要有一个返回值,用return返回,函数的返回值就是属性的属性值;在 computed 属性对象中定义计算属性的方法,和取data对象里的数据属性一样,以属性访问的形式调用;