让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 相关文章推荐
前端必备神器 Snap.svg 弹动效果
Nov 10 Javascript
jquery滚动加载数据的方法
Mar 09 Javascript
JavaScript中定义函数的三种方法
Mar 12 Javascript
JQuery给select添加/删除节点的实现代码
Apr 26 Javascript
Treegrid的动态加载实例代码
Apr 29 Javascript
Node.js的文件权限及读写flag详解
Oct 11 Javascript
angular源码学习第一篇 setupModuleLoader方法
Oct 20 Javascript
javascript 动态生成css代码的两种方法
Mar 17 Javascript
原生JS实现移动端web轮播图详解(结合Tween算法造轮子)
Sep 10 Javascript
使用layer.msg 时间设置不起作用的解决方法
Sep 12 Javascript
微信小程序背景音乐开发详解
Dec 12 Javascript
js简单粗暴的发布订阅示例代码
Jan 23 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
Discuz Uchome ajaxpost小技巧
2011/01/04 PHP
php strrpos()与strripos()函数
2013/08/31 PHP
ThinkPHP中RBAC类的四种用法分析
2014/11/24 PHP
使用Composer安装Yii框架的方法
2016/03/15 PHP
javascript 模式设计之工厂模式详细说明
2010/05/10 Javascript
SOSO地图API使用(一)在地图上画圆实现思路与代码
2013/01/15 Javascript
JS分页控件 可用于无刷新分页
2013/07/23 Javascript
js onload事件不起作用示例分析
2013/10/09 Javascript
20个实用的JavaScript技巧分享
2014/11/28 Javascript
jQuery实现的登录浮动框效果代码
2015/09/26 Javascript
js 自带的 map() 方法全面了解
2016/08/16 Javascript
原生javascript实现文件异步上传的实例讲解
2017/10/26 Javascript
详解在create-react-app使用less与antd按需加载
2018/12/06 Javascript
vuex根据不同的用户权限展示不同的路由列表功能
2019/09/20 Javascript
JS组件库AlloyTouch实现图片轮播过程解析
2020/05/29 Javascript
[08:17]Ti9 现场cosplay
2019/09/10 DOTA
Python MD5文件生成码
2009/01/12 Python
Python删除空文件和空文件夹的方法
2015/07/14 Python
python素数筛选法浅析
2018/03/19 Python
python使用tornado实现登录和登出
2018/07/28 Python
Python实现iOS自动化打包详解步骤
2018/10/03 Python
Python Pandas数据结构简单介绍
2019/07/03 Python
python3.6生成器yield用法实例分析
2019/08/23 Python
关于pymysql模块的使用以及代码详解
2019/09/01 Python
python支持多线程的爬虫实例
2019/12/21 Python
python录音并调用百度语音识别接口的示例
2020/12/01 Python
惠普美国官方商店:HP Official Store
2016/08/28 全球购物
雅诗兰黛香港官网:Estee Lauder香港
2017/09/26 全球购物
abstract class和interface有什么区别?
2012/01/03 面试题
飞利信loadrunner和软件测试笔试题
2012/09/22 面试题
幼儿园教师备课制度
2014/01/12 职场文书
酒店行政人事部经理职务说明书
2014/02/26 职场文书
青年教师师德演讲稿
2014/08/26 职场文书
大学毕业论文致谢词
2015/05/14 职场文书
创业计划书之熟食店
2019/10/16 职场文书
docker compose 部署 golang 的 Athens 私有代理问题
2022/04/28 Servers