让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 3D球状导航的文章分类
Jul 06 Javascript
js中匿名函数的N种写法
Sep 08 Javascript
js模拟select下拉菜单控件的代码
May 08 Javascript
详解AngularJS控制器的使用
Mar 09 Javascript
基于javascript实现文字无缝滚动效果
Mar 22 Javascript
js判断价格,必须为数字且不能为负数的实现方法
Oct 07 Javascript
JS给Array添加是否包含字符串的简单方法
Oct 29 Javascript
新手vue构建单页面应用实例代码
Sep 18 Javascript
深入浅析JavaScript中的RegExp对象
Sep 18 Javascript
jQuery实现模糊查询的方法分析
May 10 jQuery
Vue一个案例引发的递归组件的使用详解
Nov 15 Javascript
Vue实现的父组件向子组件传值功能示例
Jan 19 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
用PHP4访问Oracle815
2006/10/09 PHP
php中处理mysql_fetch_assoc返回来的数组 不用foreach----echo
2011/05/04 PHP
PHP高级对象构建 多个构造函数的使用
2012/02/05 PHP
PHP抽象类 介绍
2012/06/13 PHP
php多用户读写文件冲突的解决办法
2013/11/06 PHP
PHP判断IP并转跳到相应城市分站的方法
2015/03/25 PHP
php实现SAE上使用storage上传与下载文件的方法
2015/06/29 PHP
PHP简单实现遍历目录下特定文件的方法小结
2017/05/22 PHP
php基于 swoole 实现的异步处理任务功能示例
2019/08/13 PHP
Laravel 模型关联基础教程详解
2019/09/17 PHP
JS实现多物体缓冲运动实例代码
2013/11/29 Javascript
javascript中call,apply,bind函数用法示例
2016/12/19 Javascript
jQuery中layer分页器的使用
2017/03/13 Javascript
基于js的变量提升和函数提升(详解)
2017/09/17 Javascript
JS设计模式之惰性模式(二)
2017/09/29 Javascript
vue-cli扩展多模块打包的示例代码
2018/04/09 Javascript
浅谈element中InfiniteScroll按需引入的一点注意事项
2020/06/05 Javascript
webpack4从0搭建组件库的实现
2020/11/29 Javascript
基于python list对象中嵌套元组使用sort时的排序方法
2018/04/18 Python
python实现输入任意一个大写字母生成金字塔的示例
2019/10/27 Python
python3 求约数的实例
2019/12/05 Python
pytorch常见的Tensor类型详解
2020/01/15 Python
Python读取多列数据以及用matplotlib制作图表方法实例
2020/09/23 Python
CSS3实现DIV圆角效果完整代码
2012/10/10 HTML / CSS
定义css设备类型-Media Queries图表简介及使用方法
2013/01/21 HTML / CSS
天猫超市:阿里巴巴打造的网上超市
2016/11/02 全球购物
匈牙利最大的健身制造商和销售商:inSPORTline
2018/10/30 全球购物
Nebula美国官网:便携式投影仪
2019/03/15 全球购物
爱尔兰最大的体育零售商:Life Style Sports
2019/06/12 全球购物
英国领先的酒杯和水晶玻璃器皿制造商:Dartington Crystal
2019/06/23 全球购物
美国最大的户外装备和服装购物网站:Backcountry
2019/10/15 全球购物
培训专员岗位职责
2014/02/26 职场文书
体操比赛口号
2014/06/10 职场文书
舞蹈兴趣小组活动总结
2014/07/07 职场文书
年度安全生产目标责任书
2014/07/23 职场文书
解决pycharm下载库时出现Failed to install package的问题
2021/09/04 Python