ref和reactive区别?

秋知德雨个人 2023-6-5 1,373 6/5

1.ref

ref是通过Object.defineProperty()的get set数据劫持实现的响应式

  • 作用: 定义一个响应式的数据

  • 语法: const xxx = ref(initValue)

    • 创建一个包含响应式数据的引用对象(reference对象,简称ref对象)

    • JS中操作数据: xxx.value

    • 模板中读取数据: 不需要.value,直接:<div>{{xxx}}</div>

  • 备注:

    • 接收的数据可以是:基本类型、也可以是对象类型。

    • 基本类型的数据:响应式依然是靠Object.defineProperty()getset完成的。

    • 对象类型的数据:内部 “ 求助 ” 了Vue3.0中的一个新函数—— reactive函数。

把数据扔给ref。ref加工生成引用对象.

 

小总结:

ref声明响应式数据,是在value里面,所以可以用const声明,因为不是全部替换,只是内部替换赋值

 const bannerlist = ref([])
 .....
  bannerlist.value = res.result

2.reactive

  • 作用: 定义一个对象类型的响应式数据(基本类型不要用它,要用ref函数)

  • 语法:const 代理对象= reactive(源对象)接收一个对象(或数组),返回一个代理对象(Proxy的实例对象,简称proxy对象)

  • reactive定义的响应式数据是“深层次的”。

  • 内部基于 ES6 的 Proxy 实现,通过代理对象操作源对象内部数据进行操作。

小总结:

reactive声明的响应式数据在里面是对象,在对象里面包含数据,如果全部总结赋值reactive声明的变量就会造成响应式数据丢失;

 //错误演示:
 let bannerlist1 = reactive([])
  bannerlist1={api数据}
 
 //正确演示:
 let bannerlist1 = reactive({
     data:[]
 })
  bannerlist1.data={api数据}

通过Proxy(代理): 拦截对象中任意属性的变化, 包括:属性值的读写、属性的添加、属性的删除等。

通过Reflect(瑞福来各特 反射): 对 源对象的属性进行操作。

- THE END -

秋知德雨个人

6月05日23:19

最后修改:2023年6月5日
5

非特殊说明,本博所有文章均为博主原创。

共有 0 条评论