请问小程序页面跳转的时候,能不刷新页面吗?类似返回上一页的效果?

uni.navigateBack({
    delta: 1, //返回层数,2则上上页
})

我在 A 页面这样点击跳转返回上一页B页面,B 页面数据不会被刷新,但是我从 B 页面点击进入 A 页面的时候,页面就会被刷新。

请问:如何让前进、后退都能保持页面不被刷新?

阅读 4.2k
4 个回答

可以确定的是使用 uni.navigateTo() 是肯定会触发组件全部生命周期的。

而小程序的页面栈是有上限的。也就是说超出了这个上限,即使你使用的是楼上的先判断是否在页面堆栈中已经存在,再通过 uni.navigatoBack() 方法去返回也会刷新页面。因为页面存在是会有内存消耗的,小程序不会任意你缓存全部页面的。

所以不该操心的事情就别纠结了。应该去触发页面请求的就让她触发。

如果真的想要做到无感刷新,你可以把已经请求回来的数据保存在本地缓存,每次先去判断本地缓存中是否已经存在了,如果存在就直接读取并载入。
但是这样并不友好因为缓存在本地的数据是脱机的,也就是说数据失去了时效性。这并不是一个很好的用户体验。用户在一段时间内查看到的数据都是陈旧的。


App会缓存就是另外一回事情了,已经不是Web前端的范畴了。你也可以多尝试几款APP会发送网络请求的,你也都会看到他们其实都会去Loading。

不能,如果用uni.navigateTo跳转页面,肯定会导致刷新。只有用uni.navigateBack返回页面才不会刷新,保持之前的状态。

第一次肯定是要刷新的,可以根据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
    })
}
uni.navigateBack({
    delta: 1, //返回层数,2则上上页
})

会刷新页面,要想不刷新,可以通过组件实现,在同一个页面切换组件的显示。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题