小程序的页面栈的坑

[TOC]

app-page-error

页面栈只能叠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出
  • 要么不提供出口,用户手动回退

5. onShow 与 onLoad 与路由跳转使用细节

  • onLoad页面加载时调用,可以获取参数,通过options。onShow页面显示时调用。 
  • 主要区别:从二级页面返回该页面时,onLoad不会再次加载,而onshow会重新加载。这点很重要:
    1. 如果加载列表页,二级页面对一级的列表页面内容有修改,则以及列表函数应该在onShow中加载,否则可以选择onLoad。
    2. 如果从一个页面携带参数跳转到另外一个页面,在另一个页面想获得参数,最好在onLoad中,通过options可以直接拿到

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!