当前位置:   article > 正文

toRaw()、reactive()以及ref和reactive的区别

toRaw()、reactive()以及ref和reactive的区别
  1. <script setup lang="ts">
  2. import {reactive, toRaw, isReactive} from "vue"
  3. const state = { count : 1}
  4. const reactiveState = reactive(state)
  5. console.log( toRaw(reactiveState) === state ) // true
  6. isReactive(toRaw(reactiveState)) // false
  7. </script>

toRaw 根据vue创建的代理返回其原始对象, reactive根据原始对象创建一个vue代理。

在此总结ref与reactive的区别:

1. ref能同时处理基本数据类型和对象,而reactive只能处理对象。

ref是通过一个中间对象RefImpl持有数据,并重写它的set和get方法实现数据劫持的,本质上是通过Object.defineProperty对RefImpl的value属性进行劫持。

reactive则是通过Proxy进行劫持的,Proxy无法对基本数据类型进行操作。

2. ref需要通过value属性间接的访问数据,(在templates中vue做了自动展开),而reactive可以直接访问。

3. 可以给ref的值重新分配给一个新对象,而reactive只能修改当前代理的属性,否则会破坏响应性。

4. ref()在原始数据为Object类型时,会通过reactive包装原始数据后再赋值给_value。

5. watch()默认情况下只监听ref的value,而对reactive执行深度监听。

参考链接:Vue中ref()和 reactive() 的区别_ref,reactive-CSDN博客

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/215442
推荐阅读
相关标签
  

闽ICP备14008679号