对于刚接触vue的同学会经常遇到数据更新了但是模板没有更新的问题,下面将结合vue的响应式特性以及异步更新机制分析常见的错误:

异步更新带来的数据响应式误解
异步数据的处理基本是一定会遇到的,处理不好就会遇到数据不更新的问题,但有一种情况是在未正确处理的情况下也能正常更新,这就会造成一种误解,详情如下所示:
模板
<div id="app">
<h2>{{dataObj.text}}</h2>
</div>
js
new Vue({
el: '#app',
data: {
dataObj: {}
},
ready: function () {
var self = this;
/**
* 异步请求模拟
*/
setTimeout(function () {
self.dataObj = {};
self.dataObj['text'] = 'new text';
}, 3000);
}
})
上面的代码非常简单,我们都知道vue中在data里面声明的数据才具有响应式的特性,所以我们一开始在data中声明了一个dataObj空对象,然后在异步请求中执行了两行代码,如下:
self.dataObj = {};
self.dataObj['text'] = 'new text';
首先清空原始数据,然后添加一个text属性并赋值。到这里为止一切都如我们所想的,数据和模板都更新了。
那么问题来了,dataObj.text具有响应式的特性吗?
模板更新了,应该具有响应式特性,如果这么想那么你就已经走入了误区,一开始我们并没有在data中声明.text属性,所以该属性是不具有响应式的特性的。
但模板切切实实已经更新了,这又是怎么回事呢?
那是因为vue的dom更新是异步的,即当setter操作发生后,指令并不会立马更新,指令的更新操作会有一个延迟,当指令更新真正执行的时候,此时.text属性已经赋值,所以指令更新模板时得到的是新值。
具体流程如下所示:
所以真正的触发更新操作是self.dataObj = {};这一句引起的,所以单看上述例子,具有响应式特性的数据只有dataObj这一层,它的子属性是不具备的。
对比示例:
模板
<div id="app">
<h2>{{dataObj&&dataObj.text}}</h2>
</div>
js
new Vue({
el: '#app',
data: {
dataObj: {}
},
ready: function () {
var self = this;
/**
* 异步请求模拟
*/
setTimeout(function () {
self.dataObj['text'] = 'new text';
}, 3000);
}
})
上述例子的模板是不会更新的。
Vue.$set
通过$set方法可以将添加一个具备响应式特性的属性,并且其子属性也具备响应式特性,但是必须是新属性才可以,如果是本身已有的属性该方法是不起作用的。
new Vue({
el: '#app',
data: {
dataObj: {}
},
ready: function () {
var self = this;
/**
* 异步请求模拟
*/
setTimeout(function () {
var data = {
name: 'xiaofu',
age: 18
};
var data01 = {
name: 'yangxiaofu',
age: 19
};
self.dataObj['person'] = {};
self.$set('dataObj.info', data);
self.$set('dataObj.person', data01);
}, 3000);
}
})
如上所示, .person属性是不具备响应式特性的。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# vue响应式数据
# vue
# 响应式
# Vue3关于响应式数据类型详解(ref、reactive、toRef、及toRefs)
# vue3中如何使用ref和reactive定义和修改响应式数据(最新推荐)
# Vue.js响应式数据的简单实现方法(一看就会)
# Vue.js中provide/inject实现响应式数据更新的方法示例
# Vue实现双向绑定的原理以及响应式数据的方法
# Vue创建浅层响应式数据的实例详解
# 所示
# 这一
# 不具备
# 的是
# 就会
# 是在
# 来了
# 会有
# 你就
# 也能
# 有一种
# 一切都
# 才可以
# 那是因为
# 大家多多
# 两行
# 这又
# 清空
# 正确处理
# 其子
相关文章:
代购小票制作网站有哪些,购物小票的简要说明?
制作网站的基本流程,设计网站的软件是什么?
成都网站制作报价公司,成都工业用气开户费用?
如何用PHP工具快速搭建高效网站?
建站之星后台管理:高效配置与模板优化提升用户体验
如何使用Golang table-driven基准测试_多组数据测量函数效率
已有域名能否直接搭建网站?
网站制作软件免费下载安装,有哪些免费下载的软件网站?
网站制作费用多少钱,一个网站的运营,需要哪些费用?
如何高效配置香港服务器实现快速建站?
零服务器AI建站解决方案:快速部署与云端平台低成本实践
网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?
微课制作网站有哪些,微课网怎么进?
济南网站制作的价格,历城一职专官方网站?
深圳企业网站制作设计,在深圳如何网上全流程注册公司?
seo网站制作优化,网站SEO优化步骤有哪些?
制作网站的过程怎么写,用凡科建站如何制作自己的网站?
我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?
实例解析Array和String方法
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
常州企业网站制作公司,全国继续教育网怎么登录?
css网站制作参考文献有哪些,易聊怎么注册?
建站之星logo尺寸如何设置最合适?
如何通过云梦建站系统实现SEO快速优化?
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
油猴 教程,油猴搜脚本为什么会网页无法显示?
如何通过虚拟主机空间快速建站?
如何在腾讯云免费申请建站?
网站制作免费,什么网站能看正片电影?
焦点电影公司作品,电影焦点结局是什么?
齐河建站公司:营销型网站建设与SEO优化双核驱动策略
制作网站的软件免费下载,免费制作app哪个平台好?
家庭服务器如何搭建个人网站?
如何实现建站之星域名转发设置?
建站之星如何通过成品分离优化网站效率?
建站上传速度慢?如何优化加速网站加载效率?
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?
头像制作网站在线制作软件,dw网页背景图像怎么设置?
如何快速生成专业多端适配建站电话?
如何快速搭建高效可靠的建站解决方案?
香港服务器如何优化才能显著提升网站加载速度?
建站之星价格显示格式升级,你的预算足够吗?
网站制作服务平台,有什么网站可以发布本地服务信息?
制作旅游网站html,怎样注册旅游网站?
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
建站主机与虚拟主机有何区别?如何选择最优方案?
如何制作网站标识牌,动态网站如何制作(教程)?
h5网站制作工具有哪些,h5页面制作工具有哪些?
*请认真填写需求信息,我们会在24小时内与您取得联系。