- 当前 Bug 的表现(可附上截图)
小程序首页 onShow 生命周期 在保持小程序面板不关闭的情况下会被调用两次
- 预期表现
onShow 被调用一次
- 复现路径
下拉小程序面板,点击进入小程序(onShow输出1次,正确)
点击右上角关闭小程序
保持小程序下拉面板,再次点进小程序(onShow 输出2次,不正确)
小程序下拉面板指的时下图红框内部分,个人测试发现一旦收起该面板重新下拉再进入 onShow 能够正常被调用1次
)
- 提供一个最简复现 Demo
Page({
onShow(){
console.log(“onShow”);
}
})
我也遇到相同的问题了
App.js里的onShow也一样有相同的问题
暂时只能自己设个标识来侦测onShow是否已经被调用过了
以下这个办法是不得已的办法,但是如果要在每个Page里都做这个判断的话问题就严重了,得重写Page,用Component来替代,但是那又牵扯出更多的问题。
if (! this .globalData.onShow) { // execute code this .globalData.onShow = true ; } }, onHide: function () { this .globalData.onShow = false ; } |
找到一个应该可以暂时使用的方法,也不影响已经定义的onShow和onHide
// custom-page.js
let onShowFunction = options.onShow; // 这里自行做错误监测 options.onShow = function () { if (! this .onShowFlag) { onShowFunction.call( this , arguments); this .onShowFlag = true ; } }; let onHideFunction = options.onHide; // 这里自行做错误监测 options.onHide = function () { this .onShowFlag = false ; onHideFunction.call( this , arguments); }; return options; } // page Page( new customPage({ onShow: function () {}, onHide: function () {} })); |