← 返回首页
Vue3基础教程(二十二)
发表时间:2021-08-10 23:47:37
reactive与ref-细节

ref和reactive是Vue3的 composition API中2个最重要的响应式API。通常情况下,ref用来处理基本类型数据, reactive用来处理对象(递归深度响应式)。但是其实ref也可以用来定义对象类型的响应数据。

实例:

<template>
    <h1>reactive与ref细节问题</h1>
    <hr>
    <div>str: {{str}}</div>
    <div>p1: {{p1}}</div>
    <div>p2: {{p2}}</div>
    <hr>
    <button @click="update">更新</button>
</template>

<script lang="ts">
    import {defineComponent, ref, reactive} from 'vue';
    export default defineComponent({
        name: 'App',
        setup() {
            const str = ref('hello')
            const p1 = reactive({name: 'zhangsan', age: 20, car: {brand: 'BMW'}})

            // 使用ref处理对象  ==> 对象会被自动reactive为proxy对象
            const p2 = ref({name: 'lisi', age: 24, car: {brand: 'BENZ'}})
            console.log(str);
            console.log(p1);
            console.log(p2);
            console.log(p2.value.car) // 也是一个proxy对象

            function update() {
                str.value += ' vue3 ';
                p1.age += 1
                p2.value.age += 1;

                p2.value.car.brand = 'TOYOTA' // reactive对对象进行了深度数据劫持
                console.log(p2.value.car)
            }
            return {
                str,
                p1,
                p2,
                update
            }
        }
    });
</script>