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

pinia创建的store,使用结构失去响应性

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

无法动态引入图片

在computed中传参数

vue3放弃了filter

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)

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

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

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

pinia创建的store,使用结构失去响应性

 如pinia文档介绍,store由reactive包裹,所以你可以直接访问state,getters,actions,但是也会因此,解构失去响应性。pinia给的解构保持响应性的方法,使用storeToRefs。

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

Vue2中,实例会在初始化时对 挂载到$data上的对象 重写并赋值 到 $data相同属性名上,当你直接给$data的属性重新赋值,监听器会认为是对 $data属性值 的更改;

而Vue3 setup中,使用reactive工具函数对 对象进行包裹(代理)实现监听并返回一个新对象,如果对这个新对象进行对象赋值,会直接替换掉上一步 reactive的包裹后的对象,所以失去了响应性,解决方法就是,reactive包裹的对象修改时,避免对象直接赋值的写法。

img标签无法动态引入图片

vite提供了静态资源处理方法:

function getImageUrl(name) {
return new URL(`./dir/${name}.png`, import.meta.url).href
}

文档:

https://vitejs.cn/vite3-cn/guide/assets.html#importing-asset-as-url

在computed中传参数,动态依赖

利用 computed的依赖改变重新计算的特点,可以将一些复杂逻辑抽出来。在循环或是插槽中使用的时候,需要传入参数当作依赖,当这个参数(params)改变时会重新计算获取新的返回值。

let someAttr = computed(() => (params: any) => {
return params //在这里添加逻辑
})

vue3放弃了filter

使用方法或是computed代替;

PPPPS:API中有个app.config.globalProperties可以全局挂载。

VUE3+VITE 常见问题解决的更多相关文章

  1. springmvc环境搭建以及常见问题解决

    1.新建maven工程 a)  打开eclipse,file->new->project->Maven->Maven Project b)  下一步 c)   选择创建的工程为 ...

  2. ubuntu安装navicat及常见问题解决

    1.安装navicat Step1: 下载Navicat ,网址:http://www.navicat.com/en/download/download.html Step2:进入下载目录,解压压缩包 ...

  3. OpenStack安装部署管理中常见问题解决方法

    一.网络问题-network 更多网络原理机制可以参考<OpenStack云平台的网络模式及其工作机制>. 1.1.控制节点与网络控制器区别 OpenStack平台中有两种类型的物理节点, ...

  4. Web Deploy发布网站及常见问题解决方法(图文)

    Web Deploy发布网站及常见问题解决方法(图文) Windows2008R2+IIs7.5 +Web Deploy 3.5 Web Deploy 3.5下载安装 http://www.iis.n ...

  5. 接口测试之——Charles抓包及常见问题解决(转载自https://www.jianshu.com/p/831c0114179f)

    简介 Charles其实是一款代理服务器,通过成为电脑或者浏览器的代理,然后截取请求和请求结果达到分析抓包的目的.该软件是用Java写的,能够在Windows,Mac,Linux上使用,安装Charl ...

  6. charles抓包的安装,使用说明以及常见问题解决(windows)

    charles抓包的安装,使用说明以及常见问题解决(windows) https://blog.csdn.net/zhangxiang_1102/article/details/77855548

  7. Linux运维常见问题解决集锦【转】

    作为linux运维,多多少少会碰见这样那样的问题或故障,用点心,平时多注意积累,水平肯定越来越高. 下面就是常见问题解决集锦:   1.shell脚本不执行 问题:某天研发某同事找我说帮他看看他写的s ...

  8. Python爬虫编程常见问题解决方法

    Python爬虫编程常见问题解决方法: 1.通用的解决方案: [按住Ctrl键不送松],同时用鼠标点击[方法名],查看文档 2.TypeError: POST data should be bytes ...

  9. Atitit.angular.js 使用最佳实践 原理与常见问题解决与列表显示案例 attilax总结

    Atitit.angular.js 使用最佳实践 原理与常见问题解决与列表显示案例 attilax总结 1. 本文范围 1 2. Angular的优点 1 2.1. 双向数据绑定 1 2.2. dsl ...

  10. C# .Net Framework4.5中配置和使用managedCUDA及常见问题解决办法

    主要参考英文帖子.我就不翻译了哈.很容易懂的. 先说明我的运行平台: 1.IDE:Visual Studio 2012 C# .Net Framework4.5,使用默认安装路径: 2.显卡类型:NV ...

随机推荐

  1. Class path contains multiple SLF4J bindings解决

    1.根据控制台查看冲突的日志依赖 本工程Maven依赖 <dependencies> <dependency> <groupId>org.slf4j</gro ...

  2. pytest基本使用指南

    注:关于pytest的基础要点个人已经总结好了, 一. 启动: 在主函数main下启动:pytest.main(['-q','test_demo.py']) 在命令行启动:pytest ./test_ ...

  3. @Transactional千万不要这样用!!踩坑了你都可能发现不了!!!

    前阵子接手了一段同事之前的代码,里面用到了@Transactional注解,了解Spring的小伙伴肯定知道,@Transactional是Spring提供的一种控制事务管理的快捷手段.但是我这段程序 ...

  4. CCRD总目录(2007年至今,动态更新中)

    中信国健临床通讯总目录 (动态更新.末次更新: 2015-07-06) 年份 目录网址 2010年 1.2010年第01期 (或者浏览有备注的目录: 2010年第01期 ) 2.  2010年第02期 ...

  5. vue element-table滚动条样式修改

    .table_class{ &::v-deep { .el-table__body-wrapper::-webkit-scrollbar { /*width: 0;宽度为0隐藏*/ width ...

  6. vue+mysql实现前端对接数据库

    下载引入相关依赖 1.cnpm install --save mysql 2.cnpm install --save axios 3.cnpm install --save body-parser 4 ...

  7. XShell 连接 VMware Linux

    如果你的系统是 Ubuntu,并且是精简安装的系统,极大可能使用ifconfig时会提示你安装相关依赖,所以你安装的时候要记得顺带安装 ifconfig: sudo apt install ifcon ...

  8. “堆内存持续占用高 且 ygc回收效果不佳” 排查处理实践

    作者:京东零售 王江波 说明:部分素材来源于网络,数据分析全为真实数据. 一. 问题背景 自建的两套工具,运行一段时间后均出现 内存占用高触发报警,频繁young gc且效果不佳.曾经尝试多次解决,因 ...

  9. 昇腾AI新技能,还能预防猪生病?

    摘要:日前,由华为与武汉伯生科技基于昇腾AI合作研发的"思符(SiFold)蛋白质结构预测平台"正式推出,并成功应用于国药集团动物保健股份有限公司的猪圆环病毒疫苗研发中. 本文分享 ...

  10. cowtransfer(奶牛快传)自动上传文件脚本—流程分析

    cowtransfer(奶牛快传)自动上传文件脚本-流程分析 序言: 距离上传发文也有几天了,这几天也是将这个脚本优化了一下.如果还不清楚这个脚本的效果是怎么样的小伙伴可以看看我上篇文章.话不多说,我 ...