博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【小程序踩坑系列3】小程序退出后扫码再进入,“外部”代码不会再次执行
阅读量:5820 次
发布时间:2019-06-18

本文共 1197 字,大约阅读时间需要 3 分钟。

作者:

问题:

小程序退出后再次扫码进入,只会执行生命周期函数里的代码,“外部”代码不会再执行。

具体描述:

在我们的项目里,我们会将一部分本地变量不写在小程序 pageConfig 的 中,而直接在文件头进行声明。这样是为了减少 data 的大小,加快页面渲染速度。但这也无意中带来了新问题,我们看看下面的例子。

出错的index.js文件

const localFlag = true; // “外部”代码,仅执行一次初始化,第二次扫码不会执行!    const pageConfig = {        data: {            text: 'init data'        },        onLoad(this, p) {              console.error("localFlag默认为:", localFlag);            // Do something you need...            localFlag = false;        }    }    Page(pageConfig);复制代码

按照以上代码运行,用户初次扫码时,localFlag的值为true。可是,当用户退出小程序,再次扫码进入时,localFlag没有再初始化,而为false了。如下图所示:

如何避免上述情况的出现呢?

其实也很简单,就是在文件头部只做本地变量声明,而不做定义。将定义部分放在生命周期函数(如:onload)内。具体代码如下:

正确的ndex.js文件

const localFlag; // 只做变量声明而不定义    const pageConfig = {        data: {            text: 'init data'        },        onLoad(this, p) {              localFlag = true;            console.error("localFlag默认为:", localFlag);            // Do something you need...            localFlag = false;        }    }    Page(pageConfig);复制代码

如此,每次进入页面 localFlag 都会被置为 true 了。

环境:

IOS 和 安卓 均可稳定复现。

原因:

这看起来属于小程序自身的模块设计方式导致的。推测即使退出小程序,之前打开的页面也没有做到真正卸载,而处在内存之中。下次再次进入同一个页面时,会被唤起。

解决方案:

只在头部代码进行本地变量声明,而不定义。将本地变量的定义放在生命周期函数中去。

风险:

属于小程序开发的经验积累相关。

转载地址:http://nwzdx.baihongyu.com/

你可能感兴趣的文章
基于appium的安卓自动化测试环境搭建
查看>>
Windows Azure 自动化配置介绍
查看>>
Zabbix3.0 监控Windows Client
查看>>
ArrayList和LinkedList的几种循环遍历方式及性能对比分析
查看>>
Linux下邮件发送 sendEmail介绍
查看>>
android之首选项相关 Preferences(一) (转)
查看>>
Object_C 中的通知 iOS
查看>>
linux下安装redis,启动,停止,设置密码
查看>>
NT6 HDD Installer 使用教程
查看>>
披着微电影外衣的广告 在扼杀微电影产业
查看>>
mysql update语句
查看>>
多线程设计模式——概述——笔记
查看>>
Juniper实现HA
查看>>
Hive 简单SQL
查看>>
ARP地址解析协议<三>——地址解析之动态解析改进
查看>>
WinDbg使用方法
查看>>
《Ghost Win7 SP1 电脑商装机版 V3.0》64位(电脑疯子作品)
查看>>
js获取浏览器窗口的大小
查看>>
Linux发邮件之mail
查看>>
Thinkphp 之 表单令牌错误
查看>>