VueJS中浅响应与深响应的原理和区别,如何实现?

2026-04-01 13:270阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计746个文字,预计阅读时间需要3分钟。

VueJS中浅响应与深响应的原理和区别,如何实现?

原文:简述伪原创以下开头内容,不要数数,不超过100字,直接输出结果:原文+前文中讲完了如何响应Object,并处理了一些响应中的问题,但截至目前,包括之前实现的响应式,其实只是浅响应。修改后:概述前文对Object响应方法的介绍及问题处理,但当前及之前实现的响应式仅限浅响应。

正文

前文中讲完了如何响应Object,并处理了一些响应中的问题,但是我们目前,包括之前实现的响应式,其实只是浅响应。

直接上代码

const obj = {a:{b:1}} const reactive = (obj)=> new Proxy(obj,{ get(target,key,receiver){ /*省略其他逻辑*/ return Reflect.get(target,key,receiver) }, /*省略其他拦截*/ }) const data = reactive(obj)

问题就出现在Reflect.get(target, key, receiver)这句代码里,我们现在尝试一下获取data.a,应该返回的是{b:1},不是Proxy,自然不会响应什么。

所以对于这种嵌套对象,我们自然要去递归的把对象转换为响应式对象。

阅读全文

本文共计746个文字,预计阅读时间需要3分钟。

VueJS中浅响应与深响应的原理和区别,如何实现?

原文:简述伪原创以下开头内容,不要数数,不超过100字,直接输出结果:原文+前文中讲完了如何响应Object,并处理了一些响应中的问题,但截至目前,包括之前实现的响应式,其实只是浅响应。修改后:概述前文对Object响应方法的介绍及问题处理,但当前及之前实现的响应式仅限浅响应。

正文

前文中讲完了如何响应Object,并处理了一些响应中的问题,但是我们目前,包括之前实现的响应式,其实只是浅响应。

直接上代码

const obj = {a:{b:1}} const reactive = (obj)=> new Proxy(obj,{ get(target,key,receiver){ /*省略其他逻辑*/ return Reflect.get(target,key,receiver) }, /*省略其他拦截*/ }) const data = reactive(obj)

问题就出现在Reflect.get(target, key, receiver)这句代码里,我们现在尝试一下获取data.a,应该返回的是{b:1},不是Proxy,自然不会响应什么。

所以对于这种嵌套对象,我们自然要去递归的把对象转换为响应式对象。

阅读全文