这里的知识是结合视频以及其他文章一起学习,仅用于个人复习记录
ref 和reactive
ref 用于基本类型
reactive 用于引用类型
如果使用ref 传递对象,修改值时候需要写为obj.value.attr 方式修改属性值
如果使用reactive 处理对象,直接obj.attr 即可 达到响应式效果
watch
watch 监听多个基本值,返回的newValue 和 oldValue是一个数组
watch 监听reactive 对象 无法正确获取oldValue(如果不需要考虑oldValue,那么这个问题影响不大)
watch 第一个参数只能是ref reactive返回值,如果想监听对象里边某个属性,则需要通过函数返回,如果该属性指向的是一个引用类型,则需要开启深度监听才能监听到变化
如果watch 监听ref(对象),如果监听对象 深层的变化,则需要传递deep(此时监听的是ref 对象,对于value指向的对象的属性变化变化需要开启deep)
如果watch 监听ref(对象),如果监听对象.value 深层的变化,则不需要传递deep(此时监听的是.value 也就是 reactive 对象不需要开启deep)
// 下面两个都满足第一个参数是ref 或者reactive对象,一个监听的是ref对象一个是reactive对象
// 需要开启deep 才能监听到age变化
watch(obj, (newValue, oldValue) => {console.log(newValue, oldValue);
}, { deep: true })
//
watch(obj.value, (newValue, oldValue) => {console.log(newValue, oldValue);
})
watchEffect
watch 既要指明监听的属性也要指明监听的回调,而watchEffect不用指明监听哪个属性,我感觉watchEffect更好用
回调里边,用到哪个值就监听哪个值,如果被监听的值发生变化时候,回调就会触发,比如监听查询关键字变化来决定触发查询操作
watchEffect(() => {if (keywords.value != '') {console.log('开始搜索', keywords.value);}
})
onActivated 和 onDeactivated(还没使用过)
补充生命周期函数activated和deactivated
这两个是路由组件所独有的两个钩子,用于捕获路由组件的激活状态,因为跳进另一个路由组件的时候,前一个路由组件会被销毁,但是加了缓存的路由,则不会被触发销毁流程;使用这两个替代销毁时的生命周期函数;
onActivated:表示路由组件被激活时触发;
onDeactivated:表示路由组件失活时触发;
这个在编写uniapp 时候有个类似的东西,比如push 到其他页面时候,前面一个页面并不会被销毁,而是只是触发了隐藏,我觉得这两个周期函数类似uniapp 当中的onShow 和 onHide 周期