shallowReactive为什么没有起效果?

shallowReactive没有起效果,用isReactive输出person.name 理论上应该为true,请问是怎么回事

const person = shallowReactive({

// 只将第一层数据做了响应式处理

name: '张三',

age: 18,

likeFood: {

fruits: {

apple: '苹果' // 深层次的数据将会是一个普通的对象

}

}

})

onMounted(() => {

//输出后发现是两个false 只输出person为true

console.log(

isReactive(person.name),

'...............',

isReactive(person.likeFood)

)


回答:

官方例子:
https://cn.vuejs.org/api/reac...
person.name 只是一个字符串,不会是 Reactive 对象的
isReactive(person.name) 等价于 isReactive("张三")

源码的处理:

const res = Reflect.get(target, key, receiver)

if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {

return res

}

// 收集依赖

if (!isReadonly) {

track(target, TrackOpTypes.GET, key)

}

// 浅层

if (shallow) {

return res

}

if (isRef(res)) {

// ref unwrapping - skip unwrap for Array + integer key.

return targetIsArray && isIntegerKey(key) ? res : res.value

}

// 是对象,再次调用 reactive

if (isObject(res)) {

// Convert returned value into a proxy as well. we do the isObject check

// here to avoid invalid value warning. Also need to lazy access readonly

// and reactive here to avoid circular dependency.

return isReadonly ? readonly(res) : reactive(res)

}

return res

以上是 shallowReactive为什么没有起效果? 的全部内容, 来源链接: utcz.com/p/933675.html

回到顶部