页面栈问题
页面栈只能叠 10 层 ┗|` O′|┛ 嗷~~
如上图所示,如果多次使用
wx.navigateTo
中途没有销毁过页面,就是出现这种情况,就是页面栈不够用了。
1. 使用 wx.navigateTo
wx.navigateTo
跳转到其他页面 会保存跳转前的页面。_跳转前的页面会存在页面栈_。- 可以使用 wx.navigateBack 回退到之前的页面栈(页面栈上限回退 - delta)。
- 并且 使用
wx.navigateTo
之间跳转的页面。调用
getCurrentPages() 获取页面栈实例的数组后 可以更好的共享数据。
2. 使用 wx.redirectTo
销毁当前页面,调转到指定页面,_跳转前的页面不会在页面栈中储存_。但是不允许跳转到 tabbar 页面。
3. 使用 wx.reLaunch
销毁页面栈所以页面,并跳转到指定页面。如果一个业务多次使用 navgateTo,结束时,推荐使用 wx.reLaunch 重定向到来的页面。比如编辑 新增之类的。
4. 避免页面栈过载
在大量使用 wx.navigateTo 业务场景中
在大量会重复操作,或大量相互重复跳转的页面更应该注意,比如管理系统的更删改查。
最优解
navigateTo 路由业务结束,使用 navigateBack 跳转回来时得层级,中间跳过得页面会全部被回收。
注意:
使用 navigateTo 跳转得页面不会被销毁,也就是通过 navigateBack 跳转回 页面栈中得某页面时,该目标页面因为在 页面栈中,并不会重新 onload。
但是
使用 navigateTo 跳转到 页面栈有得页面时,目标页面会重新挂载。
- 要么 navigateTo 进 reLaunch 出
- 要么不提供出口,用户手动回退
- 或者进入编辑页面 navigateTo。提交成功后 navigateBack 或 redirectTo。
5. onShow 与 onLoad 与路由跳转使用细节
- onLoad 页面加载时调用,可以获取参数,通过options。onShow 页面显示时调用。
- 主要区别:
从二级页面返回该页面时,onLoad不会再次加载,而onshow会重新加载。
这点很重要:
- 如果加载列表页,二级页面对一级的列表页面内容有修改,则以及列表函数应该在 onShow 中加载,否则可以选择 onLoad。
- 如果从一个页面携带参数跳转到另外一个页面,在另一个页面想获得参数,最好在 onLoad 中,通过 option 可以直接拿到
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!