【解决问题】uniapp、vue 中data 数组更新后页面不同步动态渲染更新

业务场景

业务场景

遍历数组,渲染页面,用户可以对食物类型与分量进行更改。实则就是对数组中对象的属性进行更改。然后在页面中及时渲染出来。

错误做法

直接对数据元素进行更改,伪代码如下

// 不能动态响应
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值