- 需求的场景描述(希望解决的问题)
有这样一个常用场景:
商品详情 A ——》购物车——》商品详情B
页面堆栈是[productDetail:A,CartList,productDetail:B]
商详A,B共用一个页面,但是传参不同 (productID)
当我通过默认的返回从B页面返回购物车再返回A页面时,发现内部的页面状态是B页面的。
就是说,虽然路径上的参数已经回到了productID = A,但页面的内部状态依旧是B。
导致此时如果在A页面加车时,实际上是对B商品进行加车。
但是更新参数的行为只能在onLoad()上触发,onShow()无法获取路径参数。
但是返回A页面时,是不执行onLoad方法的。
这应该是框架设计上的不周全,如果像Vue那样相同路由共享一个page 状态的话。要么提供一个整个页面流程都能获取参数的方法用于自更新页面状态。要么提供parmas路由参数,不同parmas不共享状态。
- 希望提供的能力
希望目前能在onShow()方法内抛出同onLoad()一样的option参数,解决该场景问题。
- 目前苏宁通过reLaunch规避了重复打开详情页的场景,JD购物则隐性的存在该bug。
onShow() 是监听页面显示。onload是监听页面加载。 a页面带参数跳转至b页面。b页面是要在onload进行加载的
现在的问题是,从B回到A的时候,不执行onLoad了,但是内部的ID状态还是B。虽然小程序的页面路径上的参数更新了,但我没办法更新到内部状态中去(onShow()拿不到option)。
我了解你的意思,做一个ID堆栈,每次onShow()的时候去取用,并和内部已有的id作对比,相同不取用,不同则拿出来更新内部状态。这顶多算patch,不够优雅。小程序的框架既然是相同route共用状态应该提供整个生命周期获取option的方法用来手动更新,觉得是框架上的缺陷吧~
那就不知道了
你可以用app.js里面的globalData或者storage,做标记在B页面的
onHide,或者onUnload里面去更改个参数,在A页面的onshow里面获取,如果有的话,把原先的数据清空。重新请求接口。在A页面第一次进入的时候正常走onload里面的逻辑,
正在打补丁呢233