uni-app小程序(快手、抖音)getCurrentPages使用坑位记录2
前情
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的更多相关文章
- 最新快手抖音短视频源码web+APP架设教程+完整数据
最新更新快手抖音短视频源码web+APP架设教程+完整数据完美运行 视频直播源码,好东西,反正有人要就是了. 下载地址:https://pan.baidu.com/wap/init?surl=POU5 ...
- 小程序升级实时音视频录制及播放能力,开放 Wi-Fi、NFC(HCE) 等硬件连接功能
“ 小程序升级实时音视频录制及播放能力,开放 Wi-Fi.NFC(HCE) 等硬件连接功能.同时提供按需加载.自定义组件和更多访问层级等新特性,增强了第三方平台的能力,以满足日趋丰富的业务需求.” 0 ...
- Java生鲜电商平台-APP/小程序接口传输常见的加密算法及详解
Java生鲜电商平台-APP/小程序接口传输常见的加密算法及详解 说明:Java生鲜电商平台-APP/小程序接口传输常见的加密算法及详解,加密算法,是现在每个软件项目里必须用到的内容. 广泛应用在包括 ...
- Java生鲜电商平台-电商中"再来一单"功能架构与详细设计(APP/小程序)
Java生鲜电商平台-电商中"再来一单"功能架构与详细设计(APP/小程序) 说明:在实际的业务场景中(无论是TO B还是TO C)不管是休闲食品.餐饮.水果.日用百货.母婴等高频 ...
- uni与小程序,vue的区别
标签区别 uni使用小程序的标签,vue使用web端的标签 标签名变化的: 标签描述\类别 vue uniapp 文本 span\font text 链接 a navigator/ router-li ...
- 如何在微信小程序中实现音视频通话
微信小程序的音视频通话可以通过微信提供的实时音视频能力实现.这个能力包括了音视频采集.编码.传输和解码等多个环节,开发者只需要使用微信提供的 API 接口就可以轻松地实现音视频通话功能. 在具体实现上 ...
- 微信小程序中scroll-view的几个坑
微信小程序中scroll-view的几个坑 1:设置scroll-x时,却不能横向滚动,因为view是block组件,但是这里用了flex就不能滚动了(想用flex布局,请开启属性enable-fle ...
- 小程序使用wxs解决wxml保留2位小数问题
1.出现溢出表现 从图中可以看到数字超出了很长长度.代码里面是如下这样的.为什么在0.35出现?或者一些相成的计算出现? 而 0.34却不会.(wap.0834jl.com) 0.41 也会出现,好像 ...
- 小程序使用wxs 解决wxml保留2位小数问题
1.出现溢出表现 从图中可以看到数字超出了很长长度.代码里面是如下这样的.为什么在0.35出现?或者一些相成的计算出现? 而 0.34却不会. 0.41 也会出现,好像是二进制运算出现结果. data ...
- 微信小程序开发抖音去水印功能
之前找了很多抖音去水印的工具全是广告,所以索性自己写了一个,提供给大家免费试用以下是微信小程序的二维码 使用教程: 1.打开微信搜索小程序:沸点软件技术服务 2.打开沸点软件技术服务小程序 3.去抖音 ...
随机推荐
- JAVAEE——maven安装
一.安装本地Maven 注意:检查JAVA_HOME环境变量, maven本身就是java写的,所以要求必须先安装JDK,检查本机jak环境win+r后输入cmd,然后输入java -version, ...
- Flutter(able) 的单例模式
文/ 杨加康,CFUG 社区成员,<Flutter 开发之旅从南到北>作者,小米工程师 单例设计模式(Singleton Design Pattern)理解起来非常简单. 一个类只允许创建 ...
- 一,初始 MyBatis-Plus
一,初始 MyBatis-Plus @ 目录 一,初始 MyBatis-Plus 1. MyBatis-Plus 的概述 2. 入门配置第一个 MyBatis-Plus 案例 3. 补充说明: 3.1 ...
- P4036 [JSOI2008] 火星人
#include <bits/stdc++.h> #define int long long using namespace std; int len; int m; int rt = 0 ...
- java使用正则表达式验证手机号和电话号码和邮箱号码的方法
验证手机号 我国的手机号一般是以1开头,后面跟着10位数字.因此,可以用如下正则表达式: public static boolean isValidPhoneNumber(String phoneNu ...
- 6款支持C#语言的AI辅助编程工具,开发效率提升利器!
前言 在这个AI迅速发展的阶段,涌现出了一大批好用的AI辅助编程工具.AI辅助编程工具能够提高开发效率.改善代码质量.降低bug率,是现代软件开发过程中的重要助手.今天大姚给大家分享6款AI辅助编程工 ...
- 聊聊 HTAP 的前世今生
随着现代社会大型实时分析应用的逐渐流行,关系型数据库已经难以处理高并发的事务请求.商业层面上,当全球进入数字化时代,数字化技术渗透到各行各业,同时产生了海量数据,数据的存储和应用是企业决策的重要依据之 ...
- 在 Vue 实例中编写生命周期hook 或者其它 option/propertie 时,为什么不适用箭头函数 ?
首先,箭头函数没有自己的 this 环境变量 会沿用作用域使用父级this : 由Vue 管理的函数 ,如果写成箭头函数 this 就不在是 Vue 实例 了 :
- 77.const声明对象修改对象里面的值会触发报错吗
不会,因为对象是复杂类型数据 :对象的地址保存在栈内存中,对象的数据保存在堆内存中 : 只要对象的地址不发生改变,无论堆内存的对象数据如何改变,对象的值就不会改变 :
- HDU-ACM 2024 Day2
T1004 a*b problem(HDU 7448) 不会. T1005 小塔的养成游戏之梦(HDU 7449) 不会. T1009 强攻计策(HDU 7453) 容易发现初始速度是多少对答案没有影 ...