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. JWT的原理及使用

    目录 JWT的原理及使用 一.什么是JWT? 二.签发认证流程 三.使用方法 1.设置登录接口 2.设置过期事件 3.定制返回格式 4.配置认证类和权限类 5.写登录逻辑 5.配路由 JWT的原理及使 ...

  2. Roadblocks

    poj3255 题目: Bessie has moved to a small farm and sometimes enjoys returning to visit one of her best ...

  3. .Net依赖注入、控制反转

    依赖项是指另一个对象所依赖的对象. 使用其他类所依赖的 WriteMessage 方法检查以下 MyDependency 类:   public class MyDependency { public ...

  4. Postgresql清理WAL日志

    WAL是Write Ahead Log的简写,和oracle的redo日志类似,存放在$PGDATA/pg_xlog中,10版本以后在$PGDATA/pg_wal目录. 1.如果开启了归档,在目录ar ...

  5. Net Core 网关 Ocelot 简单案例

    1.什么是Ocelot Ocelot是一个用.NET Core实现并且开源的API网关,它功能强大,包括了:路由.请求聚合.服务发现.认证.鉴权.限流熔断.并内置了负载均衡器与Service Fabr ...

  6. 工业仿真:Chai 3D之点云技术

    推荐:将 NSDT场景编辑器 加入你的3D开发工具链. 介绍   点云是三维坐标系中的一组数据点.在 CHAI3D 中,这些点由 X.Y 和 Z 坐标定义,通常用于表示对象的外表面.   点云可以由3 ...

  7. pg高可用方案repmgr带witness搭建

    一.总体架构 操作系统版本: linux redhat7.6pg版本: 12.2repmgr版本 5.2192.168.3.73 主库: repmgr+master192.168.3.74 从库1: ...

  8. 在Linux中实现打印目录程序遇到问题及解决

    今日阅读Linux程序设计第四版时,书中给出了一段实例代码,功能为实现/home目录下各级目录结构,当然不一定非得是/home下目录才可以,任何一级目录都可以. 自己尝试在Ubuntu系统运行编译,实 ...

  9. [数据库-Mongo总结]-mysql使用总结和pymysql交互

    3. MySQL 3.1 安装 3.1.1 win 3.1.1.1 安装 >下载mysql >mysql-front: Host:localhost 端口:3306 用户:root 3.1 ...

  10. PHP中的超级变量

    超级变量,又名超级全局变量,是PHP内置的变量,这些变量在代码的任意位置都能正常使用 PHP中的超级变量 9种超级变量 $GLOBALS $_SERVER 9种超级变量 目前,PHP提供了9种超级变量 ...