uni-app小程序(快手、抖音)getCurrentPages使用坑位记录

news/2024/11/10 15:28:57/文章来源:https://www.cnblogs.com/xwwin/p/18381106

前情

uni-app是我比较喜欢的跨平台框架,它能开发小程序/H5/APP(安卓/iOS),重要的是对前端开发友好,自带的IDE让开发体验也挺棒的,公司项目就是主推uni-app。

坑位

最近在做一个需求,在达到一定条件的情况下我需要根据路由堆栈中是否有我指定的页面来做不同的跳转,如果路由中有指定的页面那我直接执行uni.navigateBack指定层级即可,如果没有那就得使用uni.redirectTo跳转到指定页面,我在小程序开发工具上一切都正常,使用远程扫码调试也正常,就是手机扫码预览是不行的,而且通过小程序的vConsole控制台看到一堆警告:

Why?

我通过尝试注释掉它,页面警告消失,排除掉是我代码别的地方写的有问题,当时就一脸蒙,以为是快手小程序下getCurrentPages()调用有问题,于是在快手小程序论坛提了贴子,反映了目前遇到的问题,链接:https://developers.kuaishou.com/topic?tid=24912&bizType=miniprogram。

官方在二天后给了我回复说,没有重现出来,我于是新建一个最小项目,里面只有空白的三个页面,问题又重现,但是在最小示例工程里不只有警告,还报了大大的错误,好像是堆栈溢出问题,当时就想到是不是因为对象太大,初步怀疑是不是快手小程序工具的日志打印工具对大对象打印不了,会出现堆栈溢出导航程序崩了。

解决方案

注释掉日志输出代码即可,但又因为目前我的项目是一个多端项目,需要发布到快手抖音二端的小程序,不能因为一端有问题,就完全不看路由堆栈的日志输出,我于是通过try catch包窠它,看不了日志的一端也不至于报错。

示例代码:

export const getRoutesIndex = (route:string) => {const routes = getCurrentPages();try{console.log('---- getRoutesIndex ----:routes', routes, route);}catch(e){}const index = routes.findIndex((routeItem) => routeItem.$page && routeItem.$page.fullPath.startsWith(route));return {index,total: routes.length}
}

坑中坑

在做这一个需求的时候我又踩到另一个坑,在开发者工具上看getCurrentPages获取到的路由栈数组项上是有route值的,但是在小程序控制台上发现是没有它的,导致在解决掉因日志报错导致小程序崩的情况下还是不行,但是快手小程序又查看不到路由堆栈,发现抖音同样也不行,但是堆栈日志是可以打印的,最后在抖音小程序上看了日志才发现是因为访问的route值根本不存在,于是转而使用$page.fullpage来做判断,最终完成了该需求。所以后续开发中遇到此类问题,更多要查看真机的日志,以真机上的日志为准。

思考

小程序开发是依赖第三方小程序平台的,对于一些难定位的问题,自己折腾找不到原因后,可以优化论坛搜一搜,如果没有那就提一个贴子,一般几天内会有回复,最好是能做一个最小复现的dome,以便于官方定位问题,做最小dome的时候也许自己也能发现解决或绕过问题的方法,在开发的时候可以完全依赖开发者工具完成需求,但遇到开发者工具和小程序上表现不一致的时候应该以真机为准,因为你最后项目是跑在真机上的,当然也希望各小程序平台积极优化,给广大小程序开发者更好的开发体验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/787552.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WPF 路由事件2

1什么是路由事件 简单说,路由事件可以沿着视觉树VisualTree进行传递,在这视觉树中的所有对象都可以收到这个事件。前提是添加了检测。 1.1什么是逻辑树LogicalTree 简单理解:逻辑树就是我们在xaml中写的布局逻辑 如xaml代码:<Grid><StackPanel Orientation="…

算法与数据结构——栈

栈 栈(stack)是一种遵循先入后出逻辑的线性数据结构。如图所示,我们将堆叠元素的顶部称为“栈顶”,底部称为“栈底”。将吧元素添加到栈顶的操作叫做“入栈”,删除栈顶的操作叫做“出栈”。 栈的常用操作方法 描述 时间复杂度push() 元素入栈(添加至栈顶) O(1)pop() 栈顶…

LuCI Themes

OpenWrt 2020BootstrapBootstrap LightBootstrap DarkMaterialOpenWrt

指挥网络

树形图的定义:没有环,每个点(除了根节点)的入度都是\(1\),根节点的入度为\(0\) 朱刘算法的过程见OI-wiki;当没有环的时候,就满足了树形图的定义,于是可以结束;否则的话就将所有环缩点(注意此时由于每个点的入度都是\(1\),所以不可能存在两个环有公共点和公共边)得到…

处理异常

2、.map 没用用吗1、pdb、看完后 反汇编

CSS处理font-weight不生效问题

如何解决 Android 系统中文字体字重问题 翻找了几天资料,发现Noto Sans SC字体能支持中文/数字/英文字体 100,300,400,500,700,900 的字重,具体如下图所示:<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Sans+SC:300,400,…

处理font-weight不生效问题

如何解决 Android 系统中文字体字重问题 翻找了几天资料,发现Noto Sans SC字体能支持中文/数字/英文字体 100,300,400,500,700,900 的字重,具体如下图所示:<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Sans+SC:300,400,…

Kubernetes API资源规范

1. 资源类型和资源对象 1.1 资源类型 (Resource Types) 1.1.1 核心资源类型Kubernetes API Primitive用于描述在Kubernetes上运行应用程序的基本组件,即俗称的Kubernetes对象(Object) 它们持久存储于API Server上,用于描述集群的状态依据资源的主要功能作为分类标准,Kuber…

一本通信奥解题: 1251:仙岛求药

1251:仙岛求药 时间限制: 1000 ms 内存限制: 65536 KB提交数:31087 通过数: 13638 【题目描述】少年李逍遥的婶婶病了,王小虎介绍他去一趟仙灵岛,向仙女姐姐要仙丹救婶婶。叛逆但孝顺的李逍遥闯进了仙灵岛,克服了千险万难来到岛的中心,发现仙药摆在了迷阵的深处…

TwinCAT3 - 实现CiA402

目录1,起缘2,想办法3,开搞3.1,CANOpen通信3.1.1 对象字典3.1.2 通信建立3.2,CiA402伺服状态机3.3,伺服运行3.3.1 操作模式3.3.2 轮廓位置模式3.3.3 轮廓速度模式3.3.4 其他4,用起来 1,起缘 在TwinCAT3项目中涉及到轴运动时,通常做法都是在PLC中安装TC1250或者TF5000,…

地理:美国各州首府系列

America1.botson文化重镇波士顿 2.annapolis 3.弗吉尼亚州首府里士满 4.罗得岛州的普罗维登斯 5.加利福尼亚州的萨克拉门托 6.纽约州奥尔巴尼市 7.阿拉巴马州蒙哥马利市 8.alascap 9.arizona 10.little阿肯色州首府小石城 11.康涅狄格州哈特福德市 12.特拉华州多佛市 13.印第安…

利用kafka和kafka connect插件debezium实现oracle表同步

1.kafka安装 1.1.java安装 openjdk下载,建议使用17,至少应该高于版本11 # 进入家目录,解压下载的java包,配置环境变量 tar vxf openjdk-20.0.1_linux-x64_bin.tar.gz -C /usr/local/ vi .bash_profile # 注意要把JAVA的目录放到$PATH之前 export JAVA_HOME=/usr/local/jdk-…