让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)--(X)HTML学习
Feb 03 Javascript
在JavaScript中typeof的用途介绍
Apr 11 Javascript
jquery使用ul模拟select实现表单美化的方法
Aug 18 Javascript
jQuery获取checkboxlist的value值的方法
Sep 27 Javascript
JS实现带提示的星级评分效果完整实例
Oct 30 Javascript
javascript弹出窗口实现代码
Nov 12 Javascript
js实现正则匹配中文标点符号的方法
Dec 23 Javascript
bootstrap学习使用(导航条、下拉菜单、轮播、栅格布局等)
Dec 01 Javascript
详解Bootstrap各式各样的按钮(推荐)
Dec 13 Javascript
jQuery源码分析之sizzle选择器详解
Feb 13 Javascript
Js实现京东无延迟菜单效果实例(demo)
Jun 02 Javascript
Easyui和zTree两种方式分别实现树形下拉框
Aug 04 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 foreach 参数强制类型转换的问题
2010/12/10 PHP
thinkPHP5框架auth权限控制类与用法示例
2018/06/12 PHP
PHP htmlentities()函数用法讲解
2019/02/25 PHP
javascript之ESC(第二类混淆)
2007/05/06 Javascript
项目实践之javascript技巧
2007/12/06 Javascript
JS实现可改变列宽的table实例
2013/07/02 Javascript
jquery设置按钮停顿3秒不可用
2014/03/07 Javascript
JavaScript代码应该放在HTML代码哪个位置比较好?
2014/10/16 Javascript
Shell脚本实现Linux系统和进程资源监控
2015/03/05 Javascript
jQuery判断数组是否包含了指定的元素
2015/03/10 Javascript
在jQuery中处理XML数据的大致方法
2015/08/14 Javascript
动态的9*9乘法表效果的实现代码
2016/05/16 Javascript
Bootstrap编写一个兼容主流浏览器的受众巨幕式风格页面
2016/07/01 Javascript
AngularJS基础 ng-keypress 指令简单示例
2016/08/02 Javascript
Javascript中字符串和数字的操作方法整理
2017/01/22 Javascript
JS实现含有中文字符串的友好截取功能分析
2017/03/13 Javascript
JavaScript在控件上添加倒计时功能的实现代码
2017/07/04 Javascript
浅谈原生JS中的延迟脚本和异步脚本
2017/07/12 Javascript
静态页面实现 include 引入公用代码的示例
2017/09/25 Javascript
vue-router跳转时打开新页面的两种方法
2019/07/29 Javascript
vuex 实现getter值赋值给vue组件里的data示例
2019/11/05 Javascript
vue 中的 render 函数作用详解
2020/02/28 Javascript
python socket多线程通讯实例分析(聊天室)
2016/04/06 Python
python 实现对文件夹中的图像连续重命名方法
2018/10/25 Python
关于Python 常用获取元素 Driver 总结
2019/11/24 Python
Python smtp邮件发送模块用法教程
2020/06/15 Python
阿里健康大药房:阿里自营网上药店
2017/08/01 全球购物
写出二分查找算法的两种实现
2013/05/13 面试题
七年级地理教学反思
2014/01/26 职场文书
政法学院毕业生求职信
2014/02/28 职场文书
电焊工岗位职责
2014/03/06 职场文书
婚庆司仪主持词
2014/03/15 职场文书
平安家庭示范户事迹
2014/06/02 职场文书
民间借贷协议书范本
2014/10/01 职场文书
学习群众路线的心得体会
2014/11/05 职场文书
住房公积金贷款工资证明
2015/06/12 职场文书