【解决问题】uniapp、vue 中data 数组更新后页面不同步动态渲染更新
vue
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
项目地址:https://gitcode.com/gh_mirrors/vu/vue
免费下载资源
·
业务场景
遍历数组,渲染页面,用户可以对食物类型与分量进行更改。实则就是对数组中对象的属性进行更改。然后在页面中及时渲染出来。
错误做法
直接对数据元素进行更改,伪代码如下
// 不能动态响应
this.photoArr[index].weight= 200;
这种修改方式确实把数据给更改成功了,在控制台也能够打印出更改后的值,但是页面不会同步更新。原因如下:
由于 JavaScript 的限制 Vue 不能检测以下数组的变动[1]:
当你利用索引直接设置一个数组项时,例如:vm.items[indexOfItem] = newValue
当你修改数组的长度时,例如:vm.items.length = newLength
举个栗子
var vm = new Vue({
data: {
items: ['a', 'b', 'c']
}
})
vm.items[1] = 'x' // 不是响应性的
vm.items.length = 2 // 不是响应性的
更多信息请看这里
正确做法
uniapp
// 直接更新数组某个元素的属性,视图上不会同步更新,要使用这种方式。
/**
* @param photoArr 所要更新的数组
* @param pIndex 所要更新的数组的哪一项
* @param pItem 更新后的值
*/
that.$set(that.photoArr, pIndex, pItem);
Vue.js
在Vue.js中可以直接使用$set()方法进行更新
参考资料
1.https://cn.vuejs.org/v2/guide/reactivity.html#%E6%A3%80%E6%B5%8B%E5%8F%98%E5%8C%96%E7%9A%84%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9
GitHub 加速计划 / vu / vue
207.54 K
33.66 K
下载
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
最近提交(Master分支:2 个月前 )
73486cb5
* chore: fix link broken
Signed-off-by: snoppy <michaleli@foxmail.com>
* Update packages/template-compiler/README.md [skip ci]
---------
Signed-off-by: snoppy <michaleli@foxmail.com>
Co-authored-by: Eduardo San Martin Morote <posva@users.noreply.github.com> 4 个月前
e428d891
Updated Browser Compatibility reference. The previous currently returns HTTP 404. 5 个月前
更多推荐
已为社区贡献2条内容
所有评论(0)