1.A页面点击跳转到B页面,在B页面操作后A页面应该发生变化,但是实际上我们点击返回的时候我们发现并没有刷新,通过小程序的生命周期函数由onLoad(页面加载)、onReady(页面初次渲染完成)、onShow(页面显示)、onHide(页面隐藏)、onUnload(页面卸载)五个周期构成。
问题:如果在onShow中执行this.onLoad(),会导致页面第一次加载的时候数组加载两次!
原因:页面加载先执行onLoad,再执行的onShow,就会出现在onLoad加载一次数据,在onShow中执行this.onLoad()在加载一次数据。
解决方案:将不需要刷新的数据放在onLoad中执行,将需要刷新的数据放在onShow中执行!
2.对于组件的生命周期没有onLoad()、onShow()生命周期的页面,怎么对带有组件页面的进行页面刷新操作?
点击A页面(带有组件),进入B页面,在B页面操作完成后,同样回退到A页面时,我们对A页面的数据进行刷新操作。
组件:
HTML:
<custom-component>
<view wx:for="{{list}}"> {{item}} </view>
</custom-component>
JS:
Component({
data: {
list: []
},
ready: function() {
this.getData();
console.log('ready')
},
methods: {
getData() {
console.log("刷新数据")
var num = Math.floor(Math.random() * 10 + 1);
this.setData({
list: num
})
}
}
})
解决方案一:
在页面上添加一个参数 showCom, 同时在onShow()中修改 showCom 来渲染WXML页面实现页面刷新
解决方案二:
在Page 页面中,给页面添加ID,通过selectComponent获取到组件,同时调用更新组件的方法
A.WXML
<my-component my-property="example" id="test" wx:if="{{showCom}}" bindtap="click" />
A.JS
data: {
showCom: true
},
onShow() {
/*******方法一*******/
this.setData({
showCom: false
});
this.setData({
showCom: true
});
/**********方法二**********/
this.selectComponent("#test").getData();
},