本文共 1194 字,大约阅读时间需要 3 分钟。
众所周知,微信小程序里所有对数据的修改只有在setData里修改才会在页面上渲染。在此分享小程序里复杂数组的更新、删除、添加、拼接
数组嵌套对象
data: { cartList: [{ id: 1, goods: {id: 1, name: 'wechat'}, checked: true }, { id: 2, goods: {}, checked: false }, { id: 3, goods: {}, checked: true }] },
let index = 2;let cartList = this.data.cartListcartList.splice(index, 1)this.setData({ cartList: cartList })
只修改数据内某项里的某属性。但此方法对于有引用到被修改的数据的wxs不会刷新页面显示,尚未清楚是bug还是小程序本身就不支持。
let index = 2let updateTodo = `cartList[${index}].checked`this.setData({ [updateTodo]: true })
用一个变量接收要修改的数组,修改好后再整体setData赋值,如果原数据很大的话可能会影响性能。
let index = 2let cartList = this.data.cartList;cartList[index].checked = res.data.checkedthis.setData({ cartList: cartList })
push和concat
// push改变原数组let newList= [{ id: 4, goods: {}, checked: true }, { id: 5, goods: {}, checked: false }}]let cartList = this.data.cartList;cartList.push(...newList);this.setData({ cartList: cartList })// concat返回添加后的副本,并不会修改原有数组let newList= [{ id: 4, goods: {}, checked: true }, { id: 5, goods: {}, checked: false }}]let cartList = this.data.cartList;this.setData({ cartList: cartList.concat(newList) })
转载自: