项目需求中有这么一例:页面A 跳转到 页面B 再返回,需要对 页面A 进行刷新。
需求其实很简单,在很多场景中都需要用到,那么小程序开发中,这个需求的难点在哪里?
在于如果页面A中存在自定义组件并且发送请求,该自定义组件也需要进行刷新,也就是重新请求数据,在网络上搜索的解决方案通常都是以下这种:
<custom-component reload="{{ componentReload }}"></custom-component>
Page({
data: {
componentReload: false
},
onShow: function () {
this.setData({ componentReload: true })
}
})
该解决方案不错,但开发起来则每个页面都需要加这么一段代码,对小程序代码包的压缩不利。通过仔细研究小程序文档中的 自定义组件 - 组件生命周期
可以清楚的了解到,自定义组件是存在跟随页面生命周期的特殊生命周期,可通过这特殊生命周期实现自定义组件的内刷新,即:
// 小程序页面中含有以下两个生命周期
Page({
onShow: function () {},
onHide: function () {},
})
//自定义组件则有与之对应的特殊生命周期
Component({
pageLifetimes: {
show: function () {},
hide: function () {}
}
})
如果说有些页面用到了这个组件,但不想刷新,可以通过外部传参控制:
<custom-component reload="{{ false }}"></custom-component>
Component({
properties: {
reload: {
type: Boolean,
default: true
}
},
pageLifetimes: {
show: function () {
if (this.data.reload) {
// request
}
}
}
})