Vue 组件代码解析:数据深拷贝与响应式引用
这段代码定义了一个 Vue 组件,包括 data、props 和 watch 属性。
- 使用了 Vue 提供的
toRefs函数,将data中的info属性转换为一个包含原始对象属性的响应式引用对象,以便在模板中使用。 data函数返回一个对象,其中包含了一个info属性,该属性的值为通过 JSON 序列化和反序列化复制了modalInfo属性的值。props属性中定义了一个名为modalInfo的对象类型属性,其默认值为空对象。watch属性中定义了一个监听modalInfo属性变化的函数,当modalInfo属性发生变化时,将通过 JSON 序列化和反序列化复制modalInfo属性的值到info属性中。
代码示例:
import { toRefs } from 'vue';
export default {
components: {},
data() {
// 这里存放数据
return {
info: JSON.parse(JSON.stringify(this.modalInfo)),
};
},
props: {
modalInfo: {
type: Object,
default: () => {}
}
},
watch: {
modalInfo() {
this.info = JSON.parse(JSON.stringify(this.modalInfo))
}
},
};
解释:
-
toRefs 函数
toRefs函数用于将一个普通对象转换为一个包含响应式引用的对象。这使得我们在模板中可以直接访问对象属性,而无需使用this或$data。- 在本例中,将
info属性转换为响应式引用对象,可以方便地在模板中使用info对象的属性。
-
数据深拷贝
- 通过 JSON 序列化和反序列化复制
modalInfo属性的值,可以实现数据深拷贝。这确保了info属性的值与modalInfo属性的值是独立的,不会因为modalInfo的变化而改变。
- 通过 JSON 序列化和反序列化复制
-
watch 属性
watch属性用于监听某个属性的变化,并在属性变化时执行指定的函数。- 在本例中,监听
modalInfo属性的变化,并在modalInfo属性发生变化时,将modalInfo的值复制到info属性中。
总结:
这段代码使用 toRefs 函数创建了响应式引用对象,并通过 JSON 序列化和反序列化实现了数据深拷贝,最后使用 watch 监听 prop 变化,将 prop 的值复制到 data 中,以确保数据的一致性。
原文地址: https://www.cveoy.top/t/topic/kHeF 著作权归作者所有。请勿转载和采集!