ref
- ref所创建的对象本身不具有响应性,而是将内部值包装在特殊对象中,通过.value访问响应对象。在模板中使用ref时,不需要加.value,会自动解包。
- ref可以为对象和非对象的普通变量增加响应性。(如果是对象用proxy包装再交给_value属性,如果是非对象的普通变量直接交给_value属性,通过get和set进行依赖收集和发布更新。如果是 shallow ref直接赋值给_value.)
- ref传递给函数,同时保留对最新值和响应式的连接和访问。
- ref可以持有任何类型的值,包括深层的对象、数组或者JS内置的数据结构,ref会使它的值有深层响应性。非原始值将通过 reactive() 转换为响应式代理。(可以通过shallow ref来放弃深层响应,浅层ref可以用于避免对大型数据的响应性开销来优化性能)
reactive
- 与将内部值包装在特殊对象中的 ref 不同,reactive() 将使对象本身具有响应性。
- reactive将对象包装成一个proxy对象直接返回。
- reactive只可以为对象增加响应性
- 不能直接赋值,直接复制会将proxy对象变为普通对象而失去响应式。reactive() 将深层地转换对象:当访问嵌套对象时,它们也会被 reactive() 包装。当 ref 的值是一个对象时,ref() 也会在内部调用它。与浅层 ref 类似,这里也有一个 shallowReactive() API 可以选择退出深层响应性。