专业的编程技术博客社区

网站首页 > 博客文章 正文

vue-一句话简单粗暴解决对象属性更新问题

baijin 2024-08-23 10:29:10 博客文章 3 ℃ 0 评论

更新数组对象中的某个属性

比如你有个数组对象,想要修改某元素的值:

如果你直接赋值,

$current_all_lessons[0] = res

那么是没有效果的,视图并没有渲染,因为javascript的限制,Vue不能检测数组和对象的变化(相关说明见下)。这时候可以使用静态方法set来更新属性:

import Vue from 'vue'
...
Vue.set('$current_all_lessons[0]', 'progress_of_practice', res.progress_of_practice)

但如果还有更多数组项或者属性要修改呢,那就有点儿烦了,此时一句话就可以解决此类问题:

$current_all_lessons[0] = res
$current_all_lessons = JSON.parse(JSON.stringify(state.$current_all_lessons))

直接把修改后的对象转成json字符串,再转换回来,这样对象就成全新的了,赋值之后,全部数据得以刷新。

另外,如果只更新一个,那么使用splice也行:

let idx = $current_all_lessons.findIndex(item => item.id == id)
$current_all_lessons.splice(idx, 1, res)

缺点

影响性能!如果对象过大,渲染时间就很长,影响用户体验,毕竟这是更新所有数据,切记。

但如果数组小,属性也少,那就方便极,包括未来的各种属性名称或者属性添加删除都可以更新!

参考

想了解更多属性更新的知识,参考vue中关于属性更新-深入响应式原理:

https://cn.vuejs.org/v2/guide/reactivity.html

我是@爱玩的安哥,关注我获取更多有用知识

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表