{{ msg }}
{{ man }}
针对简单对象

针对复杂对象,但是内部的value被proxy代理了

判断是不是一个ref对象
{{ msg1 }}
{{ msg2 }}
浅层响应式。创建一个跟踪自身 .value 变化的 ref,但不会使其值也变成响应式的
{{ man }}
shallowRef针对复杂对象,其value内部直接是值,不是一个proxy对象,无法做到深层响应


shallowRef不可以和ref同时使用,如果同时使用,shallowRef也会深层响应
ref:{{ refMan }}
shallowRef:{{ man }}

总结:
强制更新页面的DOM
shallowRef:{{ man }}

官网介绍:https://cn.vuejs.org/api/reactivity-advanced.html#customref
创建一个自定义的 ref,显式声明对其依赖追踪和更新触发的控制方式。
customRef:{{ obj }}

使用场景:可以自由控制响应式处理,比如在接口调用时候(官网示例)
import { customRef } from 'vue'
export function useDebouncedRef(value, delay = 200) {
let timeout
return customRef((track, trigger) => {
return {
get() {
track()
return value
},
set(newValue) {
clearTimeout(timeout)
timeout = setTimeout(() => {
value = newValue
trigger()
}, delay)
}
}
})
}
官网:https://cn.vuejs.org/guide/essentials/reactivity-fundamentals.html#reactive
1、reactive 限定了值类型,只能用于对象类型(Object、Array、集合(Map、Set))

persion: {{ person }}

2、不能替换整个对象:reactive是proxy对象,不能直接赋值,否则会破会其响应式
list: {{ list }}

解决方法:使用数组自带方法改变数组
list: {{ list }}

reactive() 的浅层作用形式
详情见文档:https://cn.vuejs.org/api/reactivity-advanced.html#shallowreactive
.value,reactive 不需要