首页 > 其他分享 >VUE3 API之reactive和ref常见问题解决

VUE3 API之reactive和ref常见问题解决

时间:2022-12-11 10:11:36浏览次数:55  
标签:obj1 常见问题 obj target 解构 reactive API let

reactive解构最深的一层,失去响应性问题

<script setup lang="ts">
let target = { a: { b: 1 } };
let target1 = { c: 1 };

const obj = reactive(target)
const obj1 = reactive(target1)
watch(obj, () => {
    console.log('obj', obj); // 有打印
})
watch(obj1, () => {
    console.log('obj1', obj); // 无打印
})
let { a } = obj
let { c } = obj1 
a.b = 3
c = 3
</script>

 看看解构后的数据

console.log(a); // Proxy(...)
console.log(c); // 3

 由上可以看出,最深一层结构后是数值,所以没有响应性。 

使用toRef改写

let { c } = obj1
let c = toRef(obj1, 'c')
c.value = 3

或是toRefs

let { c } = toRefs(obj1)
c.value = 3

 :::补充

reactive原理简易实现

function reactive(params) {
            return new Proxy(params, {
                get(target, p, receiver) {
                    if (typeof target[p] === 'object') {
                        reactive(target[p])
                    }
                    // track(target,p)
                    return Reflect.get(target, p, receiver)
                },
                set(target, p, newValue, receiver) {
                    // trigger(target,key)
                    return Reflect.set(target, p, newValue, receiver)
                }
            })
        }

reactive对对像属性做了深层代理。

解构原理大致是创建一个变量,从对象中匹配出 与创建变量名相同的 对象属性名,将这个属性的值(或是地址,对象的引用)复制给新的变量。

从reactive和解构原理可以看出,当reactive解构到最后一层,收集依赖的方法是

track(target,p)

,返回值是一个基本数据,此时都是正常的,问题是接下来,

基本数据的值 复制给了一个新的变量,此时,响应被断开。

!!!!!!!!!!!!!!若有不对,请大佬指导!!!!!!!!!!!!!

reactive包裹后的对象 重新赋值失去响应性

Vue2

标签:obj1,常见问题,obj,target,解构,reactive,API,let
From: https://www.cnblogs.com/Merrys/p/16972455.html

相关文章

  • 功能强大的国产API管理神器 Eolink,亲测好用
    目录​​前言​​​​一、Eolink工具介绍​​​​1.Eolink是什么​​​​2.Eolink独创的DTDD​​​​3.API全生命周期管理​​​​4.Eolink的使用​​​​二、Eolink功......
  • Eolink神技之一、基于数据库智能生成API文档
    Eolink神技之一、基于数据库智能生成API文档目录​​Eolink神技之一、基于数据库智能生成API文档​​​​Eolink数据库智能API文档解决的问题​​​​演示流程​​​​一、......
  • 这款国产API工具也太强了吧!让我放弃了postman
    为什么弃用postman转用Eolink?程序员在接口开发完成后都通常需要自测,当返回结果根据符合预期时,则表示代表接口可用。自己以前用的是postman来进行接口测试,但postman只能进行......
  • .NET 6 的轻量级 Webapi 框架 FastEndpoints
    Github: https://github.com/FastEndpointsFastEndpoints(fast-endpoints.com)基于.NET6的轻量级Webapi框架FastEndpoints 大家好,我是等天黑。FastEndpoin......
  • fastapi身份认证
    官方文档FastApi提供了OAuth2PasswordBearer类对OAuth2中的password授权模式提供了支持。一、实现逻辑创建OAuth2PasswordBearer实例并指明tokenurl(认证用户获取tok......
  • C#中的WebAPI
    前端用:vue3,后端:net6,的结合代码vue3手动创建:勾选1、路由配置:router。2、vuex状态管理:store类似全局变量。3、在加上UI库:element-plus模板大致UI库模板如下:安装ui库命令:npmi......
  • 10:Java人脸识别认证-Java API 实战
    (目录)1.提出问题,引入SDK的概念什么是SDK?我们并不具备开发人脸识别的能力,但我们可以用大公司已经开发好的工具或者功能,来实现人脸识别,而大公司提供的就叫SDK(Software......
  • 常见问题解决 --- IDEA报错 org.apache.jasper.servlet.TldScanner.scanJars 至少有一
    问题描述 问题原因tomcat版本太高,代码使用的是低版本 解决办法降低tomcat版本。或者修改代码到高版本。  ......
  • API接口文档实例
    接口描述获取接口统一鉴权码token接口,此接口调用需要appid凭证和secret密钥,每个微信只有一对请求URLhttps://api.weixin.qq.com/cgi-bin/token?grant_type=client_cr......
  • 性能测试常见问题分析
    一、内存溢出1、堆内存溢出现象:(1)压测执行一段时间后,系统处理能力下降。这时用JConsole、JVisualVM等工具连上服务器查看GC情况,每次GC回收都不彻底并且可用堆内存越......