uni.navigateBack({
delta: 1, //返回层数,2则上上页
})
我在 A 页面这样点击跳转返回上一页B页面,B 页面数据不会被刷新,但是我从 B 页面点击进入 A 页面的时候,页面就会被刷新。
请问:如何让前进、后退都能保持页面不被刷新?
uni.navigateBack({
delta: 1, //返回层数,2则上上页
})
我在 A 页面这样点击跳转返回上一页B页面,B 页面数据不会被刷新,但是我从 B 页面点击进入 A 页面的时候,页面就会被刷新。
请问:如何让前进、后退都能保持页面不被刷新?
第一次肯定是要刷新的,可以根据getCurrentPages()的route获取历史路由,用findIndex去找,找到了就调用uni.navigateBack(),下面是我之前写tabbar跳转的方法你参考一下:
export const tabbarNavgate = url => {
let index = getCurrentPages().findIndex(item => {
return item.route === url
})
if (index !== -1) {
uni.navigateBack({
delta: getCurrentPages().length - index -1
})
return
}
url = `/${url}`
uni.navigateTo({
url
})
}
13 回答12.9k 阅读
7 回答2.1k 阅读
3 回答1.3k 阅读✓ 已解决
2 回答1.3k 阅读✓ 已解决
6 回答1.2k 阅读✓ 已解决
6 回答1.1k 阅读
3 回答1.3k 阅读✓ 已解决
可以确定的是使用
uni.navigateTo()
是肯定会触发组件全部生命周期的。而小程序的页面栈是有上限的。也就是说超出了这个上限,即使你使用的是楼上的先判断是否在页面堆栈中已经存在,再通过
uni.navigatoBack()
方法去返回也会刷新页面。因为页面存在是会有内存消耗的,小程序不会任意你缓存全部页面的。所以不该操心的事情就别纠结了。应该去触发页面请求的就让她触发。
如果真的想要做到无感刷新,你可以把已经请求回来的数据保存在本地缓存,每次先去判断本地缓存中是否已经存在了,如果存在就直接读取并载入。
但是这样并不友好因为缓存在本地的数据是脱机的,也就是说数据失去了时效性。这并不是一个很好的用户体验。用户在一段时间内查看到的数据都是陈旧的。
而
App
会缓存就是另外一回事情了,已经不是Web前端的范畴了。你也可以多尝试几款APP会发送网络请求的,你也都会看到他们其实都会去Loading。