让Vue响应Map或Set的变化操作


Posted in Javascript onNovember 11, 2020

问题背景

我想在vuex的state中使用map,这样可以使很多操作变得方便

const state = {
 all: new Map()
}

这样的写法是没有问题的,不会报错,state.all可以像正常的Map一样使用。

但是这里有一个问题,vue的响应式系统不支持Map和Set,也就是说,当Map与Set里面的元素变化时Vue追踪不到这些变化,因此无法做出响应。这样一来,页面上依赖all的元素也不会随all的变化而变化

解决方法

用户”inca”的回答

you need to create a serializable replica of this structure and expose it to Vue

data() {
 mySetChangeTracker: 1,
 mySet: new Set(),
},

computed: {
 mySetAsList() {
 var x = this.mySetChangeTracker;
 // By using `mySetChangeTracker` we tell Vue that this property depends on it,
 // so it gets re-evaluated whenever `mySetChangeTracker` changes
 return Array.from(this.mySet);
 },
},

methods: {
 add(item) {
 this.mySet.add(item);
 // Trigger Vue updates
 this.mySetChangeTracker += 1;
 }
}

解决方法是用一个可序列化的mySetChangeTracker来手动追踪变化

Vue追踪不到Set的变化,但是可以追踪到mySetChangeTracker的变化,所以当Set发生改变后,手动改变mySetChangeTracker的值就能让Vue知道我的数据发生了变化。

在mySetAsList里面写入var x = this.mySetChangeTracker,这样一来当mySetChangeTracker更新后,mySetAsList就会做出响应

补充知识:vue渲染时对象里面的对象的属性提示undefined,但渲染成功

场景:

从后台请求的数据结构如下:

让Vue响应Map或Set的变化操作

让Vue响应Map或Set的变化操作

我的list是对象,而comment又是list里的对象,渲染成功了,却报如下错:

让Vue响应Map或Set的变化操作

解决办法:

添加一个:v-if

让Vue响应Map或Set的变化操作

以上这篇让Vue响应Map或Set的变化操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
在你的网页中嵌入外部网页的方法
Apr 02 Javascript
关于IE BUG与字符串截取substr的解决办法
Apr 10 Javascript
使用jQuery制作遮罩层弹出效果的极简实例分享
May 12 Javascript
JS未跨域操作iframe里的DOM
Jun 01 Javascript
JS 动态加载js文件和css文件 同步/异步的两种简单方式
Sep 23 Javascript
Node.js复制文件的方法示例
Dec 29 Javascript
通过js修改input、select默认字体颜色
Apr 19 Javascript
C#实现将一个字符转换为整数
Dec 12 Javascript
JavaScript实现多重继承的方法分析
Jan 09 Javascript
vue-router 实现导航守卫(路由卫士)的实例代码
Sep 02 Javascript
写一个Vue Popup组件
Feb 25 Javascript
微信小程序如何利用getCurrentPages进行页面传值
Jul 01 Javascript
vue项目中使用rem,在入口文件添加内容操作
Nov 11 #Javascript
VUE前端从后台请求过来的数据进行转换数据结构操作
Nov 11 #Javascript
Vue 防止短时间内连续点击后多次触发请求的操作
Nov 11 #Javascript
Vue 401配合Vuex防止多次弹框的案例
Nov 11 #Javascript
VUE-ElementUI 自定义Loading图操作
Nov 11 #Javascript
在elementui中Notification组件添加点击事件实例
Nov 11 #Javascript
vue.js+element 默认提示中英文操作
Nov 11 #Javascript
You might like
上海无线电三厂简史修改版
2021/03/01 无线电
PHP 文件上传功能实现代码
2009/06/24 PHP
PHP计划任务、定时执行任务的实现代码
2011/04/23 PHP
php的instanceof和判断闭包Closure操作示例
2020/01/26 PHP
js不是基础的基础
2006/12/24 Javascript
Script标签与访问HTML页面详解
2014/01/10 Javascript
JavaScript的strict模式与with关键字介绍
2014/02/08 Javascript
jQuery自带的一些常用方法总结
2014/09/03 Javascript
DOM基础教程之模型中的模型节点
2015/01/19 Javascript
Jquery树插件zTree用法入门教程
2015/02/17 Javascript
jQuery实现跨域iframe接口方法调用
2015/03/14 Javascript
JavaScript中this详解
2015/09/01 Javascript
jQuery实现连续动画效果实例分析
2015/10/09 Javascript
极易被忽视的javascript面试题七问七答
2016/02/15 Javascript
Spring MVC中Ajax实现二级联动的简单实例
2016/07/06 Javascript
angularjs项目的页面跳转如何实现(5种方法)
2017/05/25 Javascript
jQuery 禁止表单用户名、密码自动填充功能
2017/10/30 jQuery
浅析vue.js数组的变异方法
2018/06/30 Javascript
使用vue根据状态添加列表数据和删除列表数据的实例
2018/09/29 Javascript
Three.js实现简单3D房间布局
2018/12/30 Javascript
基于Vue插入视频的2种方法小结
2019/04/02 Javascript
Vue开发环境中修改端口号的实现方法
2019/08/15 Javascript
详解一些适用于Node.js的命名约定
2019/12/08 Javascript
Vue 防止短时间内连续点击后多次触发请求的操作
2020/11/11 Javascript
[05:59]带你看看DPC的台前幕后
2021/03/11 DOTA
Python中使用platform模块获取系统信息的用法教程
2016/07/08 Python
Python求凸包及多边形面积教程
2020/04/12 Python
纯CSS3单页切换导航菜单界面设计的简单实现
2016/08/16 HTML / CSS
HTML5未来发展趋势
2016/02/01 HTML / CSS
电子商务专业毕业生自荐书
2014/06/22 职场文书
中职生求职信
2014/07/01 职场文书
我为党旗添光彩演讲稿
2014/09/10 职场文书
九九重阳节标语
2014/10/07 职场文书
2014年节能降耗工作总结
2014/12/11 职场文书
Nginx反向代理、重定向
2022/04/13 Servers
Springboot中如何自动转JSON输出
2022/06/16 Java/Android