首先这里不得不吐槽下小程序的数组更新,直接通过 setData
替换整个数组只在开发者工具上有效果,放到真机上就完全失灵,这是一件很蛋疼的事情,不知道小程序官方团队的更新机制是什么,也没有去细看,猜测可能与引用类型有关系。
看了网上大都是指定修改数组对象里的某个元素值,如这样:
Page({
data: {
list: [{name: 'tom'}]
},
onLoad() {
this.setData({[`list[0].name`]: 'jack'})
}
})
PS:感觉这样处理非常麻烦,需要一个个遍历去处理,而且新数组与旧数组的长度可能还不一至,还要对比,想想就放弃了,也没真正测试出来效果来。
因为要做的是一个简单的页面,只有地图和列表,所以就另辟蹊径通过 redirectTo
去处理了,其就是想通过刷新页面去实现视图更新的,因为小程序没有直接的刷新页面API,所以就想着通过 reLaunch
或 redirectTo
间接实现,不过 reLaunch
没效果,所以就确定了 redirectTo
加上参数实现的视图更新,说到这,其实这个和数组更新没有关系了,不过这确实是因为数组更新没效果引起的血案,只能通过其他方式来救场,相应的示例代码:
Page({
data: {
activeTab: '',
list: []
},
onLoad(options) {
if(options.tab) {
this.setData({activeTab: options.tab})
}
this.getList()
},
changeTab(e) {
wx.redirectTo({url: `/pages/index/index?tab=${e.currentTarget.dataset.tab}`})
},
getList() {
wx.request({
url: 'xxx',
data: {
tab: this.data.activeTab
},
success: res => {
this.setData({list: res.data})
}
})
}
})
最后虽然问题侧面解决了,但这不是正规的解决方式,而且有场景限制,所以还是希望官方看看能否优化数组的更新机制。
更多前端知识,请关注小程序,不定期有惊喜!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。