ref 与 reactive
ref函数和reactive函数都是用来定义响应式数据
但是reactive更适合定义复杂的数据类型(json/arr)、ref适合定义基本数据类型(可接收基本数据类型和对象)
reactive
1、 深层次响应式,本质是将传入的数据包装成一个Proxy对象
2、 参数必须是对象或者数组,如果要让对象的某个元素实现响应式时,需要使用toRefs,这样每个都需要采用value方式访问
ref
1、函数参数可以是基本数据类型,也可以接受对象类型
2、如果参数是对象类型时,其实底层的本质还是reactive
3、ref响应式原理是依赖于Object.defineProperty()的get()和set()的
watch
在自身组件监听 reactive 对象
let a = reactive({test: 123, bg: 456, hh: {hhh: 78}}) |
为什么不加 deep不能监听呢,直接从源码看
function watch(source, cb, options) { |
traverse 深度遍历整个对象,深层次的访问其所有的响应式变量,并收集依赖
在自身组件监听 ref 对象
let a = ref({test: 123, bg: 456, hh: {hhh: 78}}) |
如果在子组件需要监听父组件的数据,同时父组件可以通过v-model双向绑定时需要非常注意,不然可能出现一些bug