自学内容网 自学内容网

reactive 是浅层相应吗

当使用 reactive 创建响应式对象时,它只会对对象的顶层属性进行响应式处理,而不会递归地处理嵌套对象内部的属性。这就是所谓的浅层响应式。我可以用一些代码来演示这一点:

import { reactive } from 'vue';

// 创建一个普通的 JavaScript 对象
const user = {
  name: 'Alice',
  age: 30,
  address: {
    city: 'New York',
    country: 'USA'
  }
};

// 使用 reactive 函数创建响应式对象
const reactiveUser = reactive(user);

// 直接修改顶层属性
reactiveUser.name = 'Bob';

// 修改嵌套对象的属性
reactiveUser.address.city = 'San Francisco';

console.log(reactiveUser.name); // 输出: Bob
console.log(reactiveUser.address.city); // 输出: San Francisco

在上面的示例中,我们使用 reactive 函数创建了一个响应式对象 reactiveUser,然后修改了它的顶层属性 name 和嵌套对象 addresscity 属性。

尽管我们成功修改了顶层属性 name,但是对于嵌套对象 addresscity 属性,Vue 并没有自动地将其变为响应式。这意味着当我们修改了 reactiveUser.address.city 时,Vue 不会检测到这个变化。

因此,在使用 reactive 创建响应式对象时,需要注意它只会处理对象的顶层属性,而不会对嵌套对象的属性进行深层处理。

<template>
  <div> {{  obs.name.age.a }}</div>
</template>

<script setup lang="ts">
import { reactive, toRefs,ref, toRaw, watchEffect } from "vue";
const obs = reactive({
  foo: 1,
  name:{
    age:{
      a:32434
    }
  },
  bar: 1,
});
obs.name.age.a = 234
console.log(obs, obs.name,'obj')




const refObj = ref({
  foo: 1,
  bar: 1,
});

// console.log(refObj,refObj.value, 'refObj')

// // let { foo, bar } = toRefs(obj);
// // foo.value++;
// // console.log(foo, 9999999999999);
// const fo = {name: '123'};
// const reactiveFoo = reactive(fo);
// console.log(reactiveFoo,'reactiveFoo')

// console.log(toRaw(reactiveFoo) === fo); // true
</script>


原文地址:https://blog.csdn.net/m0_47999208/article/details/137834647

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!