让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 相关文章推荐
图片onload事件触发问题解决方法
Jul 31 Javascript
js加载之使用DOM方法动态加载Javascript文件
Nov 08 Javascript
JavaScript运行过程中的“预编译阶段”和“执行阶段”
Dec 16 Javascript
基于jQuery实现二级下拉菜单效果
Feb 01 Javascript
AngularJS实现与Java Web服务器交互操作示例【附demo源码下载】
Nov 02 Javascript
几种响应式文字详解
May 19 Javascript
Angular2搜索和重置按钮过场动画
May 24 Javascript
vue2.0 自定义日期时间过滤器
Jun 07 Javascript
VSCode配置react开发环境的步骤
Dec 27 Javascript
Vue filter介绍及详细使用
Apr 04 Javascript
微信小程序获取用户openid的实现
Dec 24 Javascript
基于JavaScript实现控制下拉列表
May 08 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
优化NFR之一 --MSSQL Hello Buffer Overflow
2006/10/09 PHP
php $_ENV为空的原因分析
2009/06/01 PHP
php数组函数序列之array_intersect() 返回两个或多个数组的交集数组
2011/11/10 PHP
windows7下安装php的imagick和imagemagick扩展教程
2014/07/04 PHP
php静态文件返回304技巧分享
2015/01/06 PHP
JavaScript判断表单为空及获取焦点的方法
2016/02/12 Javascript
vue.js+boostrap项目实践(案例详解)
2016/09/21 Javascript
深入理解JavaScript中的预解析
2017/01/04 Javascript
JS实现弹出下载对话框及常见文件类型的下载
2017/07/13 Javascript
微信小程序scroll-view实现滚动穿透和阻止滚动的方法
2018/08/20 Javascript
在AngularJs中设置请求头信息(headers)的方法及不同方法的比较
2018/09/04 Javascript
微信小程序云开发详细教程
2019/05/16 Javascript
用webpack4开发小程序的实现方法
2019/06/04 Javascript
Vue 实现从文件中获取文本信息的方法详解
2019/10/16 Javascript
JS数组push、unshift、pop、shift方法的实现与使用方法示例
2020/04/29 Javascript
基于JavaScript实现控制下拉列表
2020/05/08 Javascript
[01:20]PWL开团时刻DAY9——听说潮汐没用?
2020/11/10 DOTA
python使用PyV8执行javascript代码示例分享
2013/12/04 Python
Python实现全角半角转换的方法
2014/08/18 Python
深入解析Python中的list列表及其切片和迭代操作
2016/03/13 Python
Python3.6 Schedule模块定时任务(实例讲解)
2017/11/09 Python
python实现两个经纬度点之间的距离和方位角的方法
2019/07/05 Python
pytorch中nn.Conv1d的用法详解
2019/12/31 Python
解决python 执行sql语句时所传参数含有单引号的问题
2020/06/06 Python
彻底解决Python包下载慢问题
2020/11/15 Python
HTML5实现签到 功能
2018/10/09 HTML / CSS
李宁官方网店:中国运动品牌
2017/11/02 全球购物
凯伦·米莲女装网上商店:Karen Millen
2017/11/07 全球购物
请解释virtual关键字的含义
2015/06/17 面试题
女大学生毕业找工作的自我评价
2013/10/03 职场文书
后勤自我鉴定
2013/10/13 职场文书
人力管理专业毕业生求职信
2014/02/27 职场文书
创业计划书之酒厂
2019/10/14 职场文书
详解MySQL主从复制及读写分离
2021/05/07 MySQL
微信小程序中wxs文件的一些妙用分享
2022/02/18 Javascript
vue router 动态路由清除方式
2022/05/25 Vue.js