vue3 其他Composition组合API_shallow...

68 阅读2分钟

这是我参与11月更文挑战的第23天,活动详情查看:2021最后一次更文挑战

shallowReactive 与shallowRef

shallowReactive:只处理对象外层属性的响应式(浅响应式)

shallowRef:只处理基本数据类型的响应式,不进行对象的响应式处理

什么时候用?
如果有一个对象数据,结构比较深,但变化时只是最外层属性变化===>shallowReactive 如果有一个对象数据,后续功能不会修改该对象中的属性,而是新的对象来替换===>shallowRef

js:

...
setup() {
        let a = ref(0)
        let b = shallowRef(0)
        let c = reactive({
            name: 'liudan',
            job: {
                salary: 70,
            },
        })
        let d = shallowReactive({
            salary: 70,
            job: {
                salary: 70,
            },
        })
        return {
            a,
            b,
            c,
            d,
        }
    },

html: image.png 我们来到页面上看看效果:

image.png 我们分别点击按钮,可以看到,a、b、c变量都实现了响应式,点击最后d按钮的时候,d变量中的salary没有变化,这个是因为shallow只响应表层结构,但是当我点了几下d按钮,再回去点c按钮的时候,发现d变量中的salary值居然是跟着一起变了,之前点的几下没有加上的现在一起加上了,比如,你点了3下d按钮d变量没有变化,但之后去点一下c按钮,就会发现,d按钮中的salary值变成了73,这个情况也同样发生在用shallowRef定义的深层次对象上,很想问问有没有懂的,跟我解释一下,这跟官方的说明不是很一致

我们来打印一下定义的变量

image.png

控制台输出: image.png 可以看到,用shallowRef定义一个对象的时候,value属性中的值不再是proxy对象,也不是数字,他是一个Object对象,不具备响应式,所以这也就是最开始说的shallowRef只处理基本数据类型的响应式,不进行对象的响应式处理