让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 相关文章推荐
Javascript学习笔记2 函数
Jan 11 Javascript
JavaScript的模块化:封装(闭包),继承(原型) 介绍
Jul 22 Javascript
让JavaScript的Alert弹出框失效的方法禁止弹出警告框
Sep 03 Javascript
js获取当前日期前七天的方法
Feb 28 Javascript
JS自动倒计时30秒后按钮才可用(两种场景)
Aug 31 Javascript
Angularjs 依赖压缩及自定义过滤器写法
Feb 04 Javascript
JS正则表达式验证密码格式的集中情况总结
Feb 23 Javascript
基于js中的原型(全面讲解)
Sep 19 Javascript
angular 用Observable实现异步调用的方法
Dec 27 Javascript
微信小程序调用微信支付接口的实现方法
Apr 29 Javascript
微信小程序实现文件、图片上传功能
Aug 18 Javascript
微信小程序中wxs文件的一些妙用分享
Feb 18 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中用接口、抽象类、普通基类实现“面向接口编程”与“耦合方法”简述
2011/03/23 PHP
PHP下使用CURL方式POST数据至API接口的代码
2013/02/14 PHP
php使用Cookie实现和用户会话的方法
2015/01/21 PHP
PHP观察者模式定义与用法实例分析
2019/03/22 PHP
[HTML/CSS/Javascript]WWTJS
2007/09/25 Javascript
js css样式操作代码(批量操作)
2009/10/09 Javascript
修改jQuery.Autocomplete插件 支持中文输入法 避免TAB、ENTER键失效、导致表单提交
2009/10/11 Javascript
7个Javascript地图脚本整理
2009/10/20 Javascript
jquery如何把参数列严格转换成数组实现思路
2013/04/01 Javascript
JavaScript获取和设置CheckBox状态的简单方法
2013/07/05 Javascript
JS实现可缩放、拖动、关闭和最小化的浮动窗口完整实例
2015/03/04 Javascript
jquery简单实现网页层的展开与收缩效果
2015/08/07 Javascript
jquery插件ajaxupload实现文件上传操作
2015/12/09 Javascript
Node.js实现数据推送
2016/04/14 Javascript
AngularJS全局警告框实现方法示例
2017/05/18 Javascript
vue如何集成raphael.js中国地图的方法示例
2017/08/15 Javascript
AngularJS中控制器函数的定义与使用方法示例
2017/10/10 Javascript
微信小程序 腾讯地图SDK 获取当前地址实现解析
2019/08/12 Javascript
layui checkbox默认选中,获取选中值,清空所有选中项的例子
2019/09/02 Javascript
如何修改Vue打包后文件的接口地址配置的方法
2020/04/22 Javascript
解决vue项目运行npm run serve报错的问题
2020/10/26 Javascript
[01:15]《辉夜杯》北京网鱼队巡礼
2015/10/26 DOTA
Ubuntu下创建虚拟独立的Python环境全过程
2017/02/10 Python
Python字符串拼接的几种方法整理
2017/08/02 Python
对python以16进制打印字节数组的方法详解
2019/01/24 Python
Python这样操作能存储100多万行的xlsx文件
2019/04/16 Python
django 邮件发送模块smtp使用详解
2019/07/22 Python
Tensorflow 定义变量,函数,数值计算等名字的更新方式
2020/02/10 Python
解决python cv2.imread 读取中文路径的图片返回为None的问题
2020/06/02 Python
Python os库常用操作代码汇总
2020/11/03 Python
如何用Python提取10000份log中的产品信息
2021/01/14 Python
美国尼曼百货官网:Neiman Marcus
2019/09/05 全球购物
某公司C#程序员面试题笔试题
2014/05/26 面试题
水污染治理工程专业求职信
2014/06/14 职场文书
条幅标语大全
2014/06/20 职场文书
Python实现天气查询软件
2021/06/07 Python