当前位置: 首页 > news >正文

Vue 3 ref(new Map()) 无法触发watch

现象

const map = ref(new Map());

通过 map.value.set(k, v); 不能触发watch

下面验证,map.value.set 并不能触发watch 的监听

代码

<script setup lang="ts">
import { ref, triggerRef, watch } from 'vue';

const map = ref(new Map<string, Record<string, any>>());
watch(map, () => {
  console.log('map change', map.value);
});


function updateMap() {
  map.value.set('1', { name: '1' });
}
</script>
<template>
  <div>
    <button @click="updateMap">updateMap</button>
  </div>
</template>

怎么解决

使用reactive

const map = reactive(new Map())

watch deep

watch(xx,xx, {deep:true})

重新赋值

只有重新给map的ref赋值才能正常触发响应式。

map.value = new Map(map.value)

但是,如果map中数据量非常大的话,不知道这样的map的复制会不会消耗非常多的性能。

记录一下现象,防止被坑。

如果大家有不同的解决办法,欢迎提出交流。

http://www.dtcms.com/a/56304.html

相关文章:

  • 力扣35.搜索插入位置-二分查找
  • Linux网络配置(超详细)
  • 「Java EE开发指南」如何用MyEclipse构建一个Web项目?(二)
  • Go权限管理库Casbin和身份验证库jwt-go初试
  • 【2025】Electron + React 架构筑基——从零到一的跨平台开发
  • 电子学会—2024年12月青少年软件编程(图形化)四级等级考试真题——趣味点阵屏
  • 当中国“智算心跳”与全球共振:九章云极DataCanvas首秀MWC 2025
  • 快速掌握EasyOCR应用实战指南
  • Qt常用控件之表格QTableWidget
  • openharmony 软总线-设备发现流程
  • OSPF网络类型:NBMA与P2MP
  • K8s 1.27.1 实战系列(七)Deployment
  • 第八节:基于Winform框架的串口助手小项目---完结优化《C#编程》
  • HTML 属性(详细易懂)
  • Manus全球首个通用Agent,Manus AI:Agent应用的ChatGPT时刻
  • Wpf-ReactiveUI-Usercontrol与主界面交互
  • 大语言模型学习--向量数据库基础知识
  • 本地运行Manus的替代方案:OpenManus的技术解析与实践指南
  • 【入门级篇】Dify安装+DeepSeek模型配置保姆级教程
  • 避免魔法值和多层if的关键:编程范式和设计模式
  • 关于优化B站关键词排名策略
  • FPGA学习篇——Verilog学习3(关键字+注释方法+程序基本框架)
  • VC++ 获取目的IP的路由
  • python导入语句的几点说明
  • OpenCV计算摄影学(14)实现对比度保留去色(Contrast Preserving Decolorization)的函数decolor()
  • TypeError: Cannot create property ‘xxx‘ on string ‘xxx‘
  • HTTP 与 HTTPS 协议:从基础到安全强化
  • C语言学习知识点总结(适合新手/考试复习)
  • 项目--高并发CPP内存池,低配版本
  • 【人工智能】Deepseek 与 Kimi 联袂:重塑 PPT 创作,开启智能演示新纪元