让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 相关文章推荐
基于jQuery的ajax功能实现web service的json转化
Aug 29 Javascript
js 格式化时间日期函数小结
Mar 20 Javascript
node.js中的fs.rmdir方法使用说明
Dec 16 Javascript
纯HTML5制作围住神经猫游戏-附源码下载
Aug 23 Javascript
ES6正则表达式的一些新功能总结
May 09 Javascript
bootstrap栅格系统示例代码分享
May 22 Javascript
JavaScript实现简单的树形菜单效果
Jun 23 Javascript
JavaScript实现一个简易的计算器实例代码
May 10 Javascript
JavaScript中call和apply方法的区别实例分析
Aug 03 Javascript
详解JavaScript中关于this指向的4种情况
Apr 18 Javascript
浅探express路由和中间件的实现
Sep 30 Javascript
利用 JavaScript 构建命令行应用
Nov 17 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
如何在PHP中使用Oracle数据库(5)
2006/10/09 PHP
php 结果集的分页实现代码
2009/03/10 PHP
自己写的兼容低于PHP 5.5版本的array_column()函数
2014/10/24 PHP
避免Smarty与CSS语法冲突的方法
2015/03/02 PHP
php读取torrent种子文件内容的方法(测试可用)
2016/05/03 PHP
Thinkphp页面跳转设置跳转等待时间的操作
2019/10/16 PHP
JavaScript对象模型-执行模型
2008/04/28 Javascript
自己整理的一个javascript日期处理函数
2010/10/16 Javascript
Flex通过JS获取客户端IP和计算机名的实例代码
2013/11/21 Javascript
AngularJS中的模块详解
2015/01/29 Javascript
jquery中$each()方法的使用指南
2015/04/30 Javascript
js jquery获取当前元素的兄弟级 上一个 下一个元素
2015/09/01 Javascript
详解AngularJS如何实现跨域请求
2016/08/22 Javascript
wap手机端解决返回上一页的js实例
2016/12/08 Javascript
微信小程序实现弹出层效果
2020/05/26 Javascript
Vue中props的详解
2019/05/16 Javascript
详解Nuxt内导航栏的两种实现方式
2020/04/16 Javascript
如何HttpServletRequest文件对象并储存
2020/08/14 Javascript
使用python实现递归版汉诺塔示例(汉诺塔递归算法)
2014/04/08 Python
Pandas之ReIndex重新索引的实现
2019/06/25 Python
详解python调用cmd命令三种方法
2019/07/08 Python
python networkx 包绘制复杂网络关系图的实现
2019/07/10 Python
在python中将list分段并保存为array类型的方法
2019/07/15 Python
python pip安装包出现:Failed building wheel for xxx错误的解决
2019/12/25 Python
使用Tensorboard工具查看Loss损失率
2020/02/15 Python
python使用pyecharts库画地图数据可视化的实现
2020/03/25 Python
Python如何在单元测试中给对象打补丁
2020/08/03 Python
浅谈Python3中print函数的换行
2020/08/05 Python
HTMl5的存储方式sessionStorage和localStorage详解
2014/03/18 HTML / CSS
美国受欢迎的眼影品牌:BH Cosmetics
2016/10/25 全球购物
《社戏》教学反思
2014/04/15 职场文书
2015年信访维稳工作总结
2015/04/07 职场文书
2016年暑假家长对孩子评语
2015/12/01 职场文书
mysql部分操作
2021/04/05 MySQL
台式电脑蓝牙适配器怎么安装?台式电脑蓝牙适配器安装教程
2022/04/08 数码科技
利用Python实现模拟登录知乎
2022/05/25 Python