2026-06-16
小程序企业端底部页面切换按钮点击后不够丝滑,点击"企业中心"后显示的是"主页"的高亮状态,Tab切换状态与实际页面不一致。
自定义TabBar组件(custom-tab-bar/index.tsx)中,useDidShow 钩子通过 Taro.getCurrentPages() 检测当前页面来设置Tab高亮状态。但在Tab切换过程中存在时序问题:
handleSwitch(2) 被调用setCurrent(2) 正确设置了高亮状态Taro.switchTab() 开始异步导航useDidShow 触发,但此时 Taro.getCurrentPages() 可能仍返回旧页面(企业主页)setCurrent(0) 覆盖了正确的状态在点击Tab切换时,通过 Taro.setStorageSync 存储目标Tab索引。useDidShow 中优先读取存储的索引,避免 getCurrentPages() 返回旧数据导致状态被错误覆盖。存储的索引使用后立即清除,不影响其他场景(如首次进入、从子页面返回)的页面路由检测逻辑。
src/custom-tab-bar/index.tsx新增常量:
// 点击Tab切换时存储目标索引的key,用于解决useDidShow中getCurrentPages()返回旧数据的问题
const TAB_SWITCH_INDEX_KEY = '_tabSwitchIndex'
修改 useDidShow 逻辑:
Storage 中存储的切换索引,有则使用并清除修改 handleSwitch 逻辑:
Storage,再设置状态和调用 switchTab