小程序踩坑
苹果和安卓的时间构造函数new Date()不同
在安卓手机上可以接受new Date('1971-1-1')
,而在苹果手机上这样构造出来的是Date <Null>
, 苹果只能接受new Date('1971-01-01')
这种形式的构造, 也即是必须严格遵循yyyy-mm-dd, 前面要补零.
云开发打不开或者白屏
微信开发者工具有时候会悄无声息的升级, 有时候给你升级到RC版, 有时候升级到不带RC但是也不是stable的版本. 这两个版本都会遇到这种问题. 版本回退就好了. 如果是RC版,可能要退两次,也就是RC->普通版->Stable版
不同的日志功能与费用
小程序有小程序的日志, 云函数还有云函数的日志.
小程序的日志有两种: 本地日志和实时日志.
- 本地日志用
log = wx.getLogManager()
获取日志管理器对象使用, 需要用户手动上传日志. 原话是用户可以通过使用 button 组件的 open-type="feedback" 来上传打印的日志。
logManager官方文档 - 实时日志用
wx.getRealtimeLogManager()
获取管理对象, 微信自动管理上传策略. RealtimeLogManager官方文档. 实时日志需要登录小程序后台, 从“开发->开发管理->运维中心->实时日志”进入日志查询页面。目前已经并入We分析
. 然后We分析有基础和专业版之分, 专业版要收费. 影响是: 基础版只支持5000条/天开发数据上报, 并且保存7天, 开发数据包含小程序日志、插件日志、性能事件.
云函数日志也分基础和高级. 高级也是要收费的. 可以在开发工具的云函数面板中查看.
进入页面的方法的不同(GPT生成)
小程序中,有几个不同的方法可以用来进行页面跳转,包括wx.navigateTo、wx.navigateToMiniProgram、wx.redirectTo和wx.reLaunch。这些方法之间存在以下区别:
wx.navigateTo:用于打开新的页面,并将其加入页面栈中。新页面打开后,可以通过返回按钮返回上一个页面。
wx.navigateToMiniProgram:用于打开其他小程序。当调用该方法时,会打开目标小程序,并且会在当前小程序后台运行,用户可通过左上角的关闭按钮返回到当前小程序。
wx.redirectTo:用于关闭当前页面,并打开新的页面。被关闭的页面将会被销毁,新页面会替换原来的页面。
wx.reLaunch:用于关闭所有页面,并打开新的页面。所有已存在的页面将会被销毁,仅保留新打开的页面。
需要注意的是,以上四个方法均需要在App.json文件中对应的页面路径进行配置。此外,redirectTo和reLaunch方法可以进行跳转传参,而navigateToMiniProgram方法可以进行跳转传参和附加数据传递。
另外, 小程序组件navigator具有所有这些打开页面的功能.
页面unload并不会吧页面的js也onload. 所以第一次进入页面和第1+N次进入页面的表现是不同的.
因为js文件本身只会加载而不会卸载, 因此:
页面onload以后, 随着页面一起load的页面js并不会unload, 在第1+N次进入页面的时候, 这个js并不会重新运行.
区别点 | 第一次进入页面 | 第1+N次进入页面 |
---|---|---|
页面js | 加载, 不在Page()函数中的所有代码在这一次执行 | 不加载(已经加载过了), 所有代码不会再执行了 |
执行顺序 | 执行js->data数据初始化并保存初始data数据->调用onload() | 不执行js->d微信会用第一次保存的原始data再次初始化data->调用onload() |
所以, 如果在page的data外初始化了全局变量, 就要保证在onload中重新初始化, 否则仍然遗留上次界面的数据造成判断错误. 最佳实践是全局变量都在onload中做初始化.
但对于定义在app.json
中的tabBar
页面则不需要, 因为tabBar只会onload一次.所以写tabbar页面必须时刻知道无论是页面还是js都不会卸载.