- 当前 Bug 的表现(可附上截图)
该小程序没有底部tab栏,所有首页也用navigateTo跳的;顶部栏有效操作按钮有两个,一个是返回按钮,一个是回到首页按钮
- 预期表现
点击返回保持正常返回逻辑,即a到b到c,c点击返回可以回到b;点击回到首页可以回到首页
- 复现路径
一直增加页面栈到10个就会复现
- 提供一个最简复现 Demo
(见代码片段链接)
- 个人想法
1.本地保存一套数组,模拟页面栈,返回等操作都用redirectTo跳转
2.尽量少的向页面栈中添加新页面,每次打开新页面,如果该页面不需要重新加载,去现有页面栈中找到已有页面,算步长,回退回去,但是会有返回逻辑混乱的bug
3.听听大佬们的意见和做法🤔🤔🤔
补充一个例子🤔现在情况是这样的,比如我在首页跳A再跳B再跳C,之后C页面点首页,因为用的是navigateTo,这样页面栈就又把首页加进去了,之后在首页的操作就又都会向页面栈中添加元素🤔
navigateBack回退,还有个参数是可以设置回退多少层的,至于你说的页面混乱,如果頕页面需要返回不同的页面时,可以在进入页面时设置一个变量来区分返回哪个页面
是这样的,比如,假设a是首页,a -> b -> c -> d, 在d页面点击返回首页应该是回a,之后如果算出回退步长,再记下是从d页面返回的首页,这样是可以做到,在首页a点击返回会回到d页面。但是,这时候如果再点击返回时呢?页面栈因为用了navigateBack已经pop出不少了,难道要在d页面返回a的时候记下当前栈所有状态吗?那还不如自己维护个数组好吧。不知道我说没说清楚
这不是bug把!,你这页面栈满了肯定跳不了其他页面了呀!
那有什么好一些的解决办法呢
你回到首页可以relaunch啊还有一些跳转可以用回退navigateBack啥的,,
跳转又不是只有navigateTo
但是这样怎么维护正常的返回逻辑呢?我想法2里也写过类似的想法
这个得按你的产品逻辑去走!具体情况需要你去考量
如果你不想被页面栈问题所困扰 建议使用relLaunch 关闭所有页面,打开到应用内的某个页面
页面栈最多10层,可以在路由跳转前判断下当前页面栈的数量,如果超出一定的数量,则由
wx.navigateTo
改为
wx.redirectTo
const config = {
maxPageStackTotal: 7
}
const isBeyondPageStackLimit = getCurrentPages().length >= config.maxPageStackTotal;
if
(isBeyondPageStackLimit) {
wx.redirectTo({
url,
success() {
}
})
}
else
{
wx.redirectTo({
url,
success() {
}
})
}
这个就相当于,一个桶只能放10个饼,装满了除非拿出几个或者全部倒了,不然就装不下更多的饼了
是啊,那有什么好一些的解决办法呢,或者说怎么处理这种情况会好一些呢
这个得按实际情况来, 如果返回无关紧要,可以清空堆栈。或者尝试下用一个全局数组来存路由,这个相当复杂