edd什么意思| 晚上睡觉遗精是什么原因| 和尚命是什么意思| 什么是cpi| 去湿气吃什么食物好| 外阴白斑吃什么药| 采是什么意思| 多梦睡眠质量不好是什么原因| 前胸后背疼是什么原因| 死后是什么感觉| 皮肤过敏吃什么| 女性白带有血丝是什么原因| 儿童上火吃什么药最好| 双子座和什么星座最不配| 什么的变化| 小孩胃疼吃什么药好| 说话不清楚是什么原因导致的| c k是什么牌子| 甜蜜素是什么| 乙肝阻断针什么时候打| 脚心烧是什么原因| 女为悦己者容是什么意思| 骨质增生挂什么科| 粗脖子病是什么原因引起的| 酒糟鼻买什么药膏去红| 吃木瓜有什么好处| 脚后筋疼是什么原因引起的| 苯磺酸氨氯地平片什么时候吃| 清高是什么意思| 早上起床腰疼是什么原因| d什么意思| 证候是什么意思| ok镜是什么| 1992年五行属什么| 丘疹用什么药膏最有效| 上热下寒吃什么食物好| 怕热易出汗是什么原因| 舌系带挂什么科| 梦见表姐是什么意思| 五行属土缺命里缺什么| 藏红花和什么一起泡水喝效果好| 气血虚吃什么药| 血钾低吃什么| 过敏吃什么药| 脚麻木是什么原因引起的| 膝盖里面痛什么原因引起的| ddg是什么意思| 收悉是什么意思| 龙肉指的是什么肉| 情妇是什么意思| 香砂六君丸治什么病| 铿锵玫瑰是什么意思| 直爽是什么意思| 耳鸣用什么药| 5月24号是什么日子| 张五行属什么| 腿肿吃什么药消肿最快最有效| 7月28日什么星座| 男生来大姨夫是什么意思| 1992年是什么年| 请辞是什么意思| 做完无痛人流需要注意什么| 小白兔是什么意思| 胸外科主要看什么病| DHL是什么| 衬衫什么面料好| 梅毒是什么| 抗核抗体是检查什么的| 面面俱到是什么意思| 各自安好什么意思| 文静是什么意思| 仓鼠可以吃什么水果| 梅毒单阳性是什么意思| 做什么运动可以瘦腿| essence什么意思| 11.15是什么星座| 脚常抽筋是什么原因| 五味子是什么味道| 户籍所在地是什么| 相濡以沫不如相忘于江湖是什么意思| 什么人不能吃南瓜| 出cos是什么意思| 气虚吃什么中成药| 桂圆什么时候成熟| 改编是什么意思| 试商是什么意思| 矫正视力是指什么| pl是什么| 什么粉一沾就痒还看不出来| 头发不长是什么原因| 容易上火是什么原因| 通字五行属什么| 防代表什么生肖| dvt是什么意思| 红细胞分布宽度偏高是什么意思| 日抛是什么意思| 尉迟恭是什么生肖| 你从什么时候不再爱我| ons是什么| 淡淡的什么| canon什么牌子| 李子和什么不能一起吃| 灵隐寺求什么最灵| 花开两朵各表一枝什么意思| 天庭是什么意思| 蝴蝶宝贝是什么病| 尿道感染用什么消炎药| 太阳指什么生肖| 什么是邮箱地址| 胆固醇为什么会高| 营业执照什么时候年审| 炖牛肉放什么调料最好| 什么是鳞状细胞| 安徽有什么特色美食| 天地不仁以万物为刍狗是什么意思| 反刍什么意思| 茉莉茶叶有什么功效和作用| 三世诸佛是什么意思| 考试前吃什么好| 为什么会得尿毒症| 家里为什么会有跳蚤| 四月初五是什么星座| 疖肿什么意思| 肝硬化挂什么科| 脾脏是人体的什么器官| 检查胆囊挂什么科| 鱼露是什么| 风度是什么意思| 豆浆喝多了有什么副作用| 冷喷机喷脸有什么好处| 什么是地震| 普惠性幼儿园是什么意思| hb是什么意思医学| 躁郁症吃什么药| 北属于五行的什么| 什么是头七| mlb是什么档次| 腮帮子疼吃什么药| nag是什么意思| 打嗝是什么原因引起的| 4月1日什么星座| 过桥米线为什么叫过桥| o型血吃什么瘦的最快| 精美的什么| 两小无猜是什么生肖| ep是什么| 鹿查什么部首| 肾结石喝酒有什么影响| 前列腺增大伴钙化是什么意思| 大便不成形吃什么食物好| 护士最高职称是什么| 脑梗不能吃什么东西| 什么是情人| 美团和美团外卖有什么区别| 拉红色的屎是什么原因| 什么是造影检查| 什么金属最硬| 尿蛋白阴性是什么意思| BLD医学上是什么意思| 罗可以组什么词| 五月十七号是什么星座| 十月什么星座| 流脑是什么| 人体有365个什么| 今天买什么股票| 舌头发白是什么原因| 看病人买什么水果| 什么时间运动减肥效果最好| 儿童头痛挂什么科| 100年前是什么朝代| ws什么意思| 处女膜是什么样的| 鱼油对身体有什么好处| 什么床品牌最好| hpv感染有什么症状| 碱性磷酸酶低是什么原因| 为什么会放屁| 57属什么生肖| 喜欢紫色的人是什么性格| 巴沙鱼为什么不能吃| 女人在什么时候最容易怀孕| 女人得痔疮原因是什么| 褙子是什么| 1999年属什么生肖| 心率过快吃什么药最好| 梦见烙饼是什么意思| 法官是什么级别| 子宫内膜2mm说明什么| 干什么呢| 人肉是什么味道| 沉香是什么东西| 骨折长骨痂有什么反应| 射精快是什么原因| shark是什么意思| 幽门杆菌有什么症状| 肾疼是什么原因| 梦见红薯是什么意思| 酸化是什么意思| 轴向是什么意思| 镇党委副书记是什么级别| 晚上手脚发热是什么原因| 梦见买床是什么意思| 国安局是什么单位| 毛周角化症用什么药膏| 138是什么意思啊| 血管属于什么组织| 名士手表属于什么档次| 哀莫大于心死什么意思| 天后是什么意思| 坐飞机要带什么证件| 生日蛋糕上写什么字比较有创意| 白是什么意思| 腰酸是什么原因引起的| yeezy是什么牌子| 什么人不能吃鸡蛋| 孕育是什么意思| 成什么结什么| 经常吃紧急避孕药有什么危害| 凤梨跟菠萝有什么区别| 猫咪有泪痕是什么原因| 口腔溃疡要吃什么药| 智齿冠周炎吃什么药| 胆碱酯酶高是什么意思| 望惠存是什么意思| 征文是什么| 踩指压板有什么好处| 类风湿因子高是什么原因| 补钙什么时间段最好| 痛经是什么| 维生素b6是什么| 植树节是什么季节| 吃什么食物补肾| 螨虫长什么样子| 喝什么可以减肥瘦肚子| 一什么湖水| 买什么保险最好最划算| 放疗和化疗有什么区别| 淋巴细胞百分比偏高是什么原因| 43岁属什么| 风湿有什么症状| 公章一般是什么字体| 喉咙痛吃什么消炎药| 三焦指的是什么| 肋骨断了是什么感觉| 双肺局限性气肿是什么病| kms是什么药| 什么是冠心病| 12.21是什么星座| 见招拆招下一句是什么| 经辐照是什么意思| 糖尿病能吃什么主食| 原位癌是什么意思| 王玉读什么| 960万平方千米是指我国的什么| 耳垂上有痣代表什么| 什么是热性水果| 嗓子疼发烧吃什么药| 男孩学什么技术最好| 女性尿频是什么原因| lesportsac什么牌子| 脸上长水泡似的痘痘是什么原因| 属鸡的女生和什么属相最配| 关节咔咔响是什么原因| 有什么无什么的成语| 百度

湖北下月起开展“飓风扫毒”等三大行动

百度 要研究精准扶贫政策,提高创新扶贫方式和实效,明确扶贫捐赠使用范围和相关标准,借鉴同业扶贫好的经验和做法,不断提升交行扶贫工作水平。

从基础库 3.8.0 起,小程序可以在路由事件下发到基础库但还未进行实际处理之前,改变这次路由事件的目标页面路径及参数。这有一点类似 HTTP 协议中 URL 重定向的效果,但为了不与现有的 页面重定向 redirectTo 混淆,我们将这种新的特性称为 路由重写(Route rewrite)

为了更好地理解这个特性,你可能需要先了解 路由事件 的相关机制

# 兼容性

目前仅支持微信安卓客户端版本 8.0.57 及以上版本,更多平台适配正在进行中。

在不兼容的客户端或基础库版本上,可以使用 wx.redirectTo 进行回退兼容,具体参考下面用法中的代码示例。

# 基本用法

例如,我们可以通过这样的方式将所有跳转到页面 A 的路由都重写到页面 B:

// 添加路由事件处理前的监听
wx.onBeforeAppRoute(res => {
  // 监听触发时,判断事件是否需要重写
  if (res.path === '/pages/A/A') {
    // 重写路由事件
    wx.rewriteRoute({
      url: '/pages/B/B',
      success(res) {
        console.info('Rewrite successfully from A to B')
      },
      fail(res) {
        console.error('Rewrite failed, reason: ' + res.errMsg)
        // 由于兼容性问题或场景不适用等原因重写失败,回退
        wx.redirectTo({
          url: '/pages/B/B',
          complete: console.info
        })
      }
    })
    return
  }
})

在这个例子中,如果有一个目标为 /pages/A/A 的路由事件(例如 navigateTo)下发到基础库,wx.onBeforeAppRoute 监听被触发,wx.rewriteRoute 执行重写后,navigateTo 的目标将变为 /pages/B/B。最终会有一个 B 页面被实例化并压入页面栈。

# 调用时机

在上面的例子中,路由重写接口 wx.rewriteRoutewx.onBeforeAppRoute 监听中执行。这是因为路由重写只能在路由事件下发到基础库,并且该路由事件还未被执行任何处理之前进行。换句话说,如果这次路由事件已经产生了实际影响(例如路由使旧页面被弹出销毁或者新页面被渲染),那我们就不能再重写这次路由事件了。因此目前有且只有 wx.onBeforeAppRoute 一个时机可以进行路由事件的重写,并且路由重写必须在这个监听的回调中 同步 进行。在 wx.onBeforeAppRoute 的回调以外的地方进行重写或者在回调中异步进行重写会导致重写失败。

# 目标限制

由于路由重写是改变一个已有路由事件的目标路径,不能改变这个事件的事件类型,因此路由重写需要保证重写后新的目标路径和事件类型是匹配的。例如:switchTab 的目标必须是一个 Tab Bar 页面,因此重写也不能将 switchTab 事件重写到非 Tab Bar 页面。

# 常见用例

此处的代码片段仅做简单的场景演示

  1. 页面未找到的情况下,回到小程序主页
    wx.onBeforeAppRoute(res => {
      if (res.notFound) {
        wx.rewriteRoute({
          url: '/pages/index/index?from-not-found=' + encodeURIComponent(res.path),
        })
      }
    })
    
  2. 线下活动结束后,活动页面下线,用户扫描线下旧物料时引导到新活动页;或者线下物料中写错了路径 / 参数,小程序中进行兼容:
    wx.onBeforeAppRoute(res => {
      if (res.path === '/pages/old-or-wrong/activity/page') {
        wx.rewriteRoute({
          url: '/pages/new/activity/page',
          preserveQuery: true,
        })
      }
    })
    
  3. 进入新任务页面时,判断用户是否有上次未完成的任务,继续处理:
    wx.onBeforeAppRoute(res => {
      if (res.path === '/pages/task/new-task') {
        const unfinishedTaskId = globalStatus.unfinishedTaskId
        if (typeof unfinishedTaskId === 'string') {
          wx.rewriteRoute({
            url: '/pages/task/perform-task?taskId=' + unfinishedTaskId,
          })
        }
      }
    })
    
  4. 小程序从首页下拉冷启动时,读取 storage 中存储的不同用户身份(例如顾客与商家、学生与家长等),跳转到不同的首页
    wx.onBeforeAppRoute(res => {
      if (res.openType === 'appLaunch') {
        const enterOptions = wx.getEnterOptionsSync()
        if (enterOptions.scene === 1089) {
          const userRole = wx.getStorageSync('user-role')
          if (userRole === 'customer') {
            wx.rewriteRoute({ url: '/pages/customer-index/index' })
          } else if (userRole === 'merchant') {
            wx.rewriteRoute({ url: '/pages/merchant-index/index' })
          } else { /* do nothing */ }
        }
      }
    })
    

# 对比页面重定向

从最终结果上来看,路由重写与页面重定向 redirectTo 都能达到类似的效果(例如在上面的例子中,最终结果都是新建了一个页面 B 的实例作为栈顶),但二者在执行原理和过程上仍有一定的差别。

页面重定向与原路由事件(例如上例中的 navigateTo)是按顺序排队执行,也就是在执行完页面 A 的渲染任务(例如准备页面渲染环境,实例化页面,处理页面栈逻辑压入页面,渲染页面,触发对应的生命周期等)之后,再处理 redirectTo;而路由重写会在原路由事件下发后处理,框架会直接执行页面 B 的渲染任务。在这个流程中,页面 A 没有被实际实例化或渲染过,因此只渲染了一次页面(redirectTo 实际渲染了两个页面),流程更快、更简单,也更能充分发挥 WebView 预加载 的效果。

当然,也不是所有的 redirectTo 都可以被替换为 rewriteRoute,例如需要由用户选择重定向目标或者从其他页面返回后重定向等情况;另一方面,rewriteRoute 作为一个新能力,并非所有的用户的运行环境都支持路由重写。开发者可以在适用 rewriteRoute 的场景和环境下使用 rewriteRoute,而如果场景不合适或者当前运行环境不支持,则回退使用 redirectTo 进行重定向。

# 常见问题

  1. 为什么我请求后台接口之后再执行 rewriteRoute 会失败?

    目前小程序提供的网络请求接口都是异步接口,发起网络请求之后,JS 运行时会在等待服务器响应时执行其他任务。因此,请求后台并等待后台接口返回时,路由事件实际上已经被处理和执行了。

    理论上,我们也可以使路由事件的处理和执行等待网络请求返回。在等待期间,由于路由事件尚未处理,用户会持续停留在上一个页面(页面跳转的情况下)或者看到白屏(小程序启动的情况下),而这段时间的长短取决于网络请求的耗时,从而可能导致用户操作打开或跳转后持续没有响应。为了回避这种情况导致的体验恶化,现阶段我们只处理同步进行的路由重写。

  2. 为什么 wx.rewriteRoute 不像 navigateTo 一样可以直接调用,而是要放在监听的回调中?

    因为相比于 wx.navigateTo 是一次路由请求,对应的 navigateTo 是一种路由事件类型,rewriteRoute 实际上并不是一种路由类型,它的作用是对一次已经存在的路由事件进行一些操作。onBeforeAppRoute 监听会在路由事件下发时触发,在这个回调中我们才能准确地对路由事件进行判断和处理。

# 常见失败及对应原因

  • not supported

    当前客户端平台或版本不支持路由重写能力

  • rewriteRoute is only allowed in a onBeforeAppRoute callback

    在不正确的时机调用 wx.rewriteRoute(见上方 调用时机

  • rewriteRoute can only be called once in a route event, this page hash been rewritten to "XXX"

    多次重写了同一个路由事件。每一个路由事件只能被重写一次,可以先计算好最终的目标路径再调用。如果确实需要进行连续的重写,应该等待重写后的路由事件重新触发 onBeforeAppRoute 监听回调,再进行重写

  • a "navigateBack" event is not allowed to be rewritten

    页面返回 navigateBack 事件是不能被重写的(因为目标页面是已经存在的原有页面)

  • rewriting a "XXX" event to to a non-tab page("YYY") is not allowed

  • rewriting a "XXX" event to a tab page("YYY") is not allowed

    重写后的目标页面与路由事件类型不匹配(见上方 目标限制

  • rewriting a route event that belongs to XXX is not allowed.

    小程序不能重写目标为插件页面的路由事件,反之插件也不能重写目标为小程序或其他插件的路由事件

睾丸扭转是什么意思 一什么方式 什么叫种水 食人鱼的天敌是什么 漂洗什么意思
肛门瘙痒挂什么科 脚为什么会痒越抓越痒 什么是奶昔 104是什么意思 冷敷眼睛有什么好处
咳嗽发烧吃什么药 药流是吃什么药 6月4号是什么星座 盗汗和自汗有什么区别 二月二十二日是什么星座
乳头很痒是什么原因 中医治未病是什么意思 梦见剃光头是什么预兆 卧榻是什么意思 偷梁换柱是什么意思
时间的定义是什么hcv7jop6ns3r.cn 赴汤蹈火的汤是什么意思hcv7jop5ns3r.cn 美人盂是什么意思hcv9jop6ns0r.cn 肌酸激酶高吃什么药hcv8jop9ns7r.cn 精神卫生科看什么病hcv7jop9ns5r.cn
羲什么意思hcv9jop1ns3r.cn 敏感肌是什么hcv9jop5ns2r.cn 什么运动长高最快xianpinbao.com 心率过快是什么原因hcv7jop5ns3r.cn 珮字五行属什么hcv9jop1ns3r.cn
夜明砂是什么hcv7jop9ns1r.cn 松鼠鱼是什么鱼hcv8jop4ns7r.cn 什么东西放进去是硬的拿出来是软的hcv7jop4ns5r.cn 肛门痛什么原因hcv8jop7ns8r.cn 达泊西汀是什么药hcv8jop5ns6r.cn
社保缴纳基数是什么意思hcv9jop5ns5r.cn 胃切除有什么影响hcv7jop9ns4r.cn 骨折不能吃什么东西hcv8jop7ns2r.cn 手背上长痣代表什么hcv8jop1ns5r.cn 自然流产的症状是什么样的onlinewuye.com
百度