compositionAPI之ref、reactive、toRef、toRefs的区别

1、ref

  • ref 用于为数据添加响应式状态。只能操作基本数据类型。返回一个具有响应式状态的副本。
    const app = Vue.createApp({
        template:`<div>{{name}}</div>`,
        setup(props,conttext){
            const { ref } = Vue;
            let name = ref('吴彦祖');

            return { name }
        }
    });
    const vm = app.mount('#root');
  • 原理:通过 ref 对数据进行封装,当数据变化时,触发模版等内容的更新。通过proxy把name变成 proxy({value: '吴彦祖'}) 这样的一个响应式引用。

2、reactive

  • reactive 用于为对象添加响应式状态。接收一个对象作为参数,返回一个具有响应式状态的副本。获取数据值的时候直接获取,不需要加.value,参数只能传入对象类型。
const app = Vue.createApp({
        template:`<div>{{objname}}---{{age}}</div>`,
        setup(props,conttext){
            const { reactive, readonly, toRefs } = Vue;
            let nameObj = reactive({name:'刘德华',age:27})
            setTimeout(() => {
                nameObj.name= '张学友';
            }, 2000);
            const {name, age} = toRefs(nameObj);
            return { name, age }
        }
    });
    const vm = app.mount('#root');

3、toRefs

  • toRefs 用于将响应式对象转换为结果对象,其中结果对象的每个属性都是指向原始对象相应属性的ref。常用于es6的解构赋值操作,因为在对一个响应式对象直接解构时解构后的数据将不再有响应式,而使用toRefs可以方便解决这一问题。
  • 原理:通过 toRefs将{name:'刘德华',age:27} 变成 { name: proxy({ value: 'dell'}),age: proxy({value: 28}) }

4、toRef

    const app = Vue.createApp({
        template:`<div>{{age}}</div>`,
        setup(props,conttext){
            const { reactive, toRef } = Vue;
            let data = reactive({name:'刘德华'})
            const age = toRef(data,'age');
            setTimeout(() => {
                data.age = 27;
            }, 2000);
            
            return { age }
        }
    });
    const vm = app.mount('#root');
toRef函数和toRefs函数的区别:

(https://blog.csdn.net/wuxing164/article/details/109801542?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-109801542-blog-112287552.pc_relevant_multi_platform_whitelistv5&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-109801542-blog-112287552.pc_relevant_multi_platform_whitelistv5&utm_relevant_index=2)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容