vue对象改变视图不更新,vue数据更新了但是视图没有更新

在使用Vue 项目时,可能会发生数据更改,但视图不会实时渲染。

为什么我的vue 视图没有渲染页面?

当您将常规JavaScript 对象传递给Vue 实例的数据选项时,Vue 会迭代该对象的所有属性,并使用Object.defineProperty 将所有这些属性转换为getter/setter。 Object.defineProperty 是一项无法进行填充的ES5 功能。因此,Vue不支持IE8以下的浏览器。

这些getter/setter 对用户来说是不可见的,但在内部,Vue 可以跟踪依赖关系,并在访问和修改属性时通知您更改。这里需要注意的一个问题是,打印数据对象时浏览器控制台中的getter/setter 格式不同,因此您可能需要安装vue-devtools 以获得更人性化的检查界面。

每个组件实例都有一个对应的watcher 实例对象,其属性在组件渲染期间被记录为依赖项,并且当稍后调用依赖项setter 时,会通知watcher 重新计算,并且关联的组件将被更新。

1、视图未更新情况1。

修改数组数据:修改数据时,使用特定的方法来操作数组。有些方法无法被Vue 观察到。

1、哪些方法修改了数组,vue中可以检测到

推()

流行音乐()

转移()

取消移位()

拼接()

排序()

向后走()

过滤器(),连接(),切片()。这些不会修改原始数组,但总是返回一个新数组。如果使用非变异方法,则可以用新数组替换旧数组

2.Vue无法检测以下修改后的数组:

直接使用索引设置项目时vm.items[indexOfItem]=newValue

改变数组的长度,例如:vm.items.length=newLength

2、视图不更新时的情况2

视图不更新的第二种情况是Vue无法检测到对象属性的添加或删除。 Vue 在实例初始化期间执行属性getter/setter 转换过程,因此该属性必须存在于数据对象中,Vue 才能对其进行转换以便能够响应。

Vue 不允许向已创建的实例动态添加新的根级响应式属性

解决方案

但是,可以使用Vue.set(object, key, value) 方法向嵌套对象添加响应属性。

Vue.set(vm.someObject, \’b\’, 2)

或者

this.$set(this.someObject,\’b\’,2) (这也是全局Vue.set 方法的别名)

有时您可能需要向现有对象添加多个属性。例如,使用Object.assign() 或_.extend() 方法添加属性。但是,以这种方式添加到对象的新属性不会触发更新。在这种情况下,您可以创建一个包含原始对象的属性和新属性的新对象。

//而不是`Object.assign(this.someObject, { a: 1, b: 2 })`

this.someObject=Object.assign({}, this.someObject, { a: 1, b: 2 }) //深拷贝

3.显示无更新情况3(异步更新队列)

我在这个项目中遇到了一个特别奇怪的情况。第一次我能够获取数据并渲染它,但从第二次开始,只有当我再次渲染页面时,数据才会更新,之后我就无法更新数据了。即时的。

要渲染的数据是之前选择的数据,而不是当前选择的数据。这通常称为“减速”。

我们来看看这个问题

您可能没有意识到,Vue 是异步执行DOM 更新的。一旦观察到数据更改,Vue 就会打开一个队列并缓冲同一事件循环中发生的所有数据更改。

如果同一个观察者被触发多次,它只会被推送到队列中一次。

缓冲期间的重复数据删除对于避免不必要的计算和DOM 操作非常重要。

然后在下一个事件循环“tick”中,

Vue 刷新队列并执行实际的(重复数据删除)工作。

在内部,Vue 尝试使用原生Promise.then 和MessageChannel 进行异步队列。如果执行环境不支持,则使用setTimeout(fn, 0)代替。

尽管Vue.js 通常鼓励开发人员以“数据驱动”的方式思考并避免直接接触DOM,但有时您确实需要这样做。要在更改数据后等待Vue 完成更新DOM,请在更改数据后立即使用Vue.nextTick(callback)。该回调函数在DOM 更新完成后调用。例如:

$nextTick() 返回一个Promise 对象,因此您可以使用新的ES2023 async/await 语法来实现相同的效果。

如果有想要学习前端或者跳槽的朋友,请私信小编说“我想学”。前端开发的视频教材非常多。

本文和图片来自网络,不代表火豚游戏立场,如若侵权请联系我们删除:https://www.huotun.com/game/675982.html

(0)
上一篇 2024年6月4日
下一篇 2024年6月4日

相关推荐

  • 吃鸡 和平精英工厂的空投怎么开?

    吃鸡 和平精英工厂的空投怎么开? 进入工厂,找到三个电闸并拉下,等待着生产流水线做完吉普车。等做好后,吉普的后面就有空头。 和平精英小兵怎么吃鸡? 开启游戏,捡装备,击打敌人,活到最后即可吃鸡 吃鸡怎么叫和平精英? 吃鸡这个叫法来源于绝地求生这款游戏,在绝地求生最早的时候,获得第一名后会显示【winer winer chicken dinner】的字样,接着…

    游戏快讯 11分钟前
  • 和平精英如何在设置打开拍摄模板?

    和平精英如何在设置打开拍摄模板? 和平精英在设置打开拍摄模板方法如下: 1. 首先需要进入到无UI模式 2. 然后点击界面右上角的方块图标进入表情设置里 3. 最后就会弹出拍摄模板界面,点击使用按钮就可以了 和平精英快手认证? 这个必须是平台签约主播,然后经过平台官方认证才能获得。必须跟工会申请,下个版本图标才能配上,但是要求直播效果好才能过审核。 和平精英…

    游戏快讯 1小时前
  • 和平精英如何登录大号?

    和平精英如何登录大号? 和平精英登录大号,只需要把微信调成自己的大号,再点击微信或QQ登录就能登录大号了 和平精英如何换机登录? 和平精英换手机登录方法如下有两种方法,第一种方法是将微信号或者QQ号给别人,别人登上微信或者QQ号,就可以直接登上游戏账号开始玩游戏了,第二种方法就是扫码登陆,登陆游戏和平精英的时候会有一个扫码登陆的选项,点击之后就会出现一个二维…

    游戏快讯 3小时前
  • 和平精英怎么做手势舞蹈,和平精英手势在哪?

    和平精英怎么做手势舞蹈,和平精英手势在哪? 1、我们可以在游戏大厅中做手势舞蹈,在游戏大厅里点击打开【仓库】。 2、在仓库界面中的右侧是分类,我们找到分类【战备】并点击。 3、然后在战备中又分为几类,我们找到【笑脸】标志并点击,如图所示。 4、这样就能看到手势舞蹈了,一般可以使用的是6个,点击一个手势舞蹈。 5、点击之后我们左侧的人物就会做出相应的手势舞蹈,…

    游戏快讯 4小时前
  • 和平精英主页啾啾如何获得?

    和平精英主页啾啾如何获得? 可以通过以下几种途径获得和平精英主页的啾啾:可以通过官方渠道或者第三方社交平台获得和平精英主页的啾啾。首先,使用官方渠道下载和注册和平精英账号后,可能会获得一定数量的啾啾。其次,加入和平精英的官方社交平台,如微信公众号或者微博账号,会通过一些活动、福利等方式不定期赠送啾啾。最后,一些第三方社交平台,如抖音、全民K歌等,也会联动和平…

    游戏快讯 5小时前