欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > Vue 3 ref(new Map()) 无法触发watch

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

2025/3/10 16:59:46 来源:https://blog.csdn.net/qq_35459724/article/details/146098197  浏览:    关键词: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的复制会不会消耗非常多的性能。

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

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词