前情

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

坑位

公司历史原因项目有APP端小程序端,但并不使用uni-app的一端发布所有平台,各端都有它的开发负责人,只有我负责的快手和抖音是基于一套代码发布多端的,因有需求是APP先行的,而基于uni-app的代码利用率还算是高的,于是这一次需求并不是重新从0到1开始开发,而是直接基于App的代码来做调整适配快手抖音端,去除掉一些App特有代码和在解决了一些样式兼容问题后,发现在快手小程序端其中带过滤筛选功能的商品列表显示异常,怎么切换筛选条件都没有更新商品列表。

Why?

在App和抖音小程序端上功能都是正常的,控制台也没有报错,同时也发现接口也是有发起的,于是开始去细看代码,发现App开发者为了组件复用,在商品列表组件有一处逻辑会根据当前是什么路由就请求对应接口,代码如下:

const getCurrentRoute = (index = 1) => {
const pages = getCurrentPages()
const currentPage = pages[pages.length - index]
const currentRoute = currentPage.route;
return currentRoute;
} const getList = (params) =>{
const curRoute = getCurrentRoute();
if(curRoute === 'pages/home/index'){
getHotList({...params})
}else{
getGoodsList({...params})
}
}

当时看到这个代码我是比较反感的,为什么要根据路由去判断请求不同接口,直接外面传一个特定的key判断是哪一个页面不是更稳定,虽然代码看着不是很认同,但按理说这功能也不至于一端能用一端不能用,开始怀疑是不是快手端获取路由栈方法getCurrentPages有什么问题,为了定位错误,我通过日志打印查看路由获取是否正确,代码如下:

const getCurrentRoute = (index = 1) => {
const pages = getCurrentPages()
console.log('---- getCurrentRoute ----:', curRoute);
const currentPage = pages[pages.length - index]
const currentRoute = currentPage.route;
return currentRoute;
}

至此才发现问题所在,在抖音端打印的路由和快手端打印的路由有一小点区别,快手端会在开头多一反斜杠:

解决方案

方案1:比较取巧偷懒的方法就是从返回看pages/home/index是二个都有的,那只判断路由是否包含pages/home/index即可,示例代码如下:

const getList = (params) =>{
const curRoute = getCurrentRoute();
if(curRoute.includes('pages/home/index')){
getHotList({...params})
}else{
getGoodsList({...params})
}
}

方案2:重写不通过路由判断,通过从外面传key判断当前组件是用在哪一个页面,来请求不同的接口,个人觉得此种方式是最稳妥的,也是我推荐的。

思考

小于uni-app跨平台的项目,虽然uni-app已经处理了绝大部分的平台差异问题,但是或多或少会有一些是平台处理漏的,遇到这种一端可以另一端不行的问题,可以先考虑是不是使用了一些平台有差异的API,手动把差异抹平即可,对于实在官方都说明有差异的,那就用好uni-app的条件编译来处理吧。

uni-app小程序(快手、抖音)getCurrentPages使用坑位记录2的更多相关文章

  1. 最新快手抖音短视频源码web+APP架设教程+完整数据

    最新更新快手抖音短视频源码web+APP架设教程+完整数据完美运行 视频直播源码,好东西,反正有人要就是了. 下载地址:https://pan.baidu.com/wap/init?surl=POU5 ...

  2. 小程序升级实时音视频录制及播放能力,开放 Wi-Fi、NFC(HCE) 等硬件连接功能

    “ 小程序升级实时音视频录制及播放能力,开放 Wi-Fi.NFC(HCE) 等硬件连接功能.同时提供按需加载.自定义组件和更多访问层级等新特性,增强了第三方平台的能力,以满足日趋丰富的业务需求.” 0 ...

  3. Java生鲜电商平台-APP/小程序接口传输常见的加密算法及详解

    Java生鲜电商平台-APP/小程序接口传输常见的加密算法及详解 说明:Java生鲜电商平台-APP/小程序接口传输常见的加密算法及详解,加密算法,是现在每个软件项目里必须用到的内容. 广泛应用在包括 ...

  4. Java生鲜电商平台-电商中"再来一单"功能架构与详细设计(APP/小程序)

    Java生鲜电商平台-电商中"再来一单"功能架构与详细设计(APP/小程序) 说明:在实际的业务场景中(无论是TO B还是TO C)不管是休闲食品.餐饮.水果.日用百货.母婴等高频 ...

  5. uni与小程序,vue的区别

    标签区别 uni使用小程序的标签,vue使用web端的标签 标签名变化的: 标签描述\类别 vue uniapp 文本 span\font text 链接 a navigator/ router-li ...

  6. 如何在微信小程序中实现音视频通话

    微信小程序的音视频通话可以通过微信提供的实时音视频能力实现.这个能力包括了音视频采集.编码.传输和解码等多个环节,开发者只需要使用微信提供的 API 接口就可以轻松地实现音视频通话功能. 在具体实现上 ...

  7. 微信小程序中scroll-view的几个坑

    微信小程序中scroll-view的几个坑 1:设置scroll-x时,却不能横向滚动,因为view是block组件,但是这里用了flex就不能滚动了(想用flex布局,请开启属性enable-fle ...

  8. 小程序使用wxs解决wxml保留2位小数问题

    1.出现溢出表现 从图中可以看到数字超出了很长长度.代码里面是如下这样的.为什么在0.35出现?或者一些相成的计算出现? 而 0.34却不会.(wap.0834jl.com) 0.41 也会出现,好像 ...

  9. 小程序使用wxs 解决wxml保留2位小数问题

    1.出现溢出表现 从图中可以看到数字超出了很长长度.代码里面是如下这样的.为什么在0.35出现?或者一些相成的计算出现? 而 0.34却不会. 0.41 也会出现,好像是二进制运算出现结果. data ...

  10. 微信小程序开发抖音去水印功能

    之前找了很多抖音去水印的工具全是广告,所以索性自己写了一个,提供给大家免费试用以下是微信小程序的二维码 使用教程: 1.打开微信搜索小程序:沸点软件技术服务 2.打开沸点软件技术服务小程序 3.去抖音 ...

随机推荐

  1. ASP.NET Core – Web API Versioning

    前言 项目持续维护, API 就需要版本控制. ASP.NET Core 有官方的插件专门处理 API 版本控制. 主要参考 Your Guide to REST API Versioning in ...

  2. Listener——监听器

    Listener   

  3. 课时05:Linux必备系统命令

  4. Java如何解决同时出库入库订单号自动获取问题

    在Java中处理同时出库和入库的订单号自动获取问题,通常涉及到多线程环境下的并发控制.为了确保订单号的唯一性和连续性,我们可以使用多种策略,如数据库的自增ID.分布式锁.或者利用Java的并发工具类如 ...

  5. Springboot 读取 resource 目录下的Excel文件并下载

    如果 inputStream 为null ,或者提示 文件路径不存在,执行 mvn clean 并 重启项目,查看target 目录下是否存在该文件 @GetMapping("/downlo ...

  6. Android 12 关机重启流程

    1. 关机流程 Android上层触发关机的入口很多,但最终几乎都是调用ShutdownThread.shutdown来实现.如下是一些常见的调用关机的点: StatusBarManagerServi ...

  7. 使用 reduce 统计字符串每个字母出现的次数

    // 统计字符串每个字母出现的次数 let str = 'asdfssaaasasasasaa' let obj = str.split('').reduce(function (prev, item ...

  8. 45. beforeCreate和created的区别

    data数据和methods的方法是否存在,是否定义了 : beforeCreate 都是 undefiend :

  9. 排查sshfs挂载失败的问题

    排查sshfs挂载失败的问题 写代码在Linux上运行,但是熟悉的IDE(比如VS code)在自己的电脑上,可以使用sshfs把linux上的目录挂载到本地,再用VScode打开即可,可以使用下面的 ...

  10. jmeter-模拟带参数的请求与上传文件

    请求参数照着前端请求的样式填即可: header带content: header不带content_type: 总结:上传文件时headers里面不能带content_type参数