用于在fn执行期间,禁用掉当前页面的onShow事件
相关使用场景:
带扫码功能的搜索框,点击扫码图标,调用支付宝小程序的my.scan进行扫码时,支付宝小程序会自动弹起一个扫码页,然后扫码成功后,你期望是带着扫出来的参数再进行查询,但是此页面设置了useDidShow事件,会额外多触发一次不带参数的查询,如果该查询接口返回的慢,就会把正确的数据给覆盖了
const getCurrentPage = () => {
const pages = Taro.getCurrentPages();
const currentPage = pages[pages.length - 1];
return currentPage;
};
// 在fn执行期间,禁用当前页面的onShow
const useDisableOnShow = (fn) => {
return async (...args) => {
const curPage = getCurrentPage();
const onShow = curPage.onShow;
curPage.onShow = () => {};
try {
await fn(...args);
} catch (error) {
} finally {
setTimeout(() => {
curPage.onShow = onShow;
});
}
};
};
export default useDisableOnShow;