博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
你真的知道如何使用Vue.set吗
阅读量:6955 次
发布时间:2019-06-27

本文共 1358 字,大约阅读时间需要 4 分钟。

前言

?我活的好累,工作8小时并且非工作时间并不想碰代码的我还是利用上班的空闲编一篇文章。

推荐有兴趣的开发者可以参加6月份Vue.js的

场景

一般想到这个api的开发者,都是遇到明明更改了数据,然而浏览器的dom却没有更新新的数据,有时候会出现操作一下其他数据,之前更新的数据才渲染到dom,有时候不管怎么操作都不会更新,这种类似的bug一直让很多开发者苦恼。

Vue.set

首先让我们看看尤大的。

每个组件都是继承了vue的原型,所以组件实例化后会在this上挂载一个$set方法,和Vue.set是一样的。

向响应式对象中添加一个属性,并确保这个新属性同样是响应式的,且触发视图更新。

文档写的很明白,向响应式对象中添加一个响应式属性,那么出现无法更新视图(dom)的情况,不就是说明视图所绑定的属性值并不是响应式么。

案例

例一:

复制代码

如上代码,当一个组件中有多个input标签,并且v-model绑定多个值时,且这些值都是某一个对象中动态出现的属性,这种情况下,如果单纯的赋值,

// 错误赋值export default {  methods: {    fn() {      getData().then(res => {        this.obj[res.key] = res.value;      })    }  }}复制代码

这种情况下,你会在devtools中看到,数据的确赋值成功了,然而input无法更新视图,并且可能你无法在这个input内输入任何内容了,这时this.obj里面的键都不是响应式的,那么this.$set方法该出场了。

// 正确姿势export default {  methods: {    fn() {      getData().then(res => {        // this.obj[res.key] = res.value;        this.$set(this.obj, res.key, res.val);      })    }  }}复制代码

此时你会发现,?视图更新了,一切都美好了,吃的饭也更香了。

例二:

有人说了,只用this.$set不就行了,Vue.set有啥用

复制代码

此时obj是一个vuex的状态,这个obj可能是其他组件或者页面的,此时Vue.set就出场了。

// 某个mutation?import Vue from 'vue';export default {  updateObj(state, { key, value }) {    // state.obj[key] = value;  这是错误的赋值    Vue.set(state.obj, key, value);  }}复制代码

It's over

一切vue技术栈的bug和疑问都可以来问我

欢迎来我的Vue技术群交流:

转载于:https://juejin.im/post/5cdcb3e4f265da03452c0090

你可能感兴趣的文章
Android 冷启动时间优化
查看>>
hadoop报JAVA_HOME is not set暂时解决办法
查看>>
jQuery笔记
查看>>
圆——高精无理数的处理
查看>>
[UOJ348]州区划分
查看>>
Android -- RecyclerView实现顶部吸附效果
查看>>
微信video标签全屏无法退出bug
查看>>
[转]PostgreSQL 中文资料汇总
查看>>
那些被疯狂追求的女孩,后来怎么样了?
查看>>
(转载)Windows 7 Ultimate(旗舰版)SP1 32/64位官方原版下载(2011年5月12日更新版)...
查看>>
内置函数
查看>>
mysql之触发器
查看>>
C 入门 第七节 结构体
查看>>
linux下安装svn
查看>>
Flash Builder快捷键
查看>>
js通过Image和canvas获取图片的base64格式的字符串(只能接受服务器上的图片,不支持本地图片直接转化为base64,因为js没有系统io的权限,js只能操作dom)...
查看>>
转:Unity3D研究院之提取游戏资源的三个工具支持Unity5(八十四)
查看>>
Javascript学习之Window
查看>>
mac 文本编辑器 文本编码Unicode utf-8 不适用的问题
查看>>
如何做好H5性能优化?
查看>>