HarmonyOS 鸿蒙Next新人求助:5.0.2(14) 返回后重新携参进入,没有刷新页面,还处于原来的生命周期?

HarmonyOS 鸿蒙Next新人求助:5.0.2(14) 返回后重新携参进入,没有刷新页面,还处于原来的生命周期?

导航发起页

```kotlin
this.pathStack.pushPathByName('DetailPage', book, true);

导航目标页面

//DetailPage.ets
[@State](/user/State) params ='' //相关的变量都是[@State](/user/State)修饰的
onPageReady() {
  this.book = this.pathStack.getParamByName('DetailPage')[0] as BookData
  this.loadContent()
}

onPageHide() {
  this.parms = '...' //重置参数
  HttpClient.getInstance().destroyHttpRequest();
}
  
// 接收http请求返回的内容
async loadContent() {
  const httpClient = HttpClient.getInstance();
  try {
    this.parms = 'http_response_content'
  } catch (err) {
  } finally {
    httpClient.destroyHttpRequest();
  }
}
  
NavDestination() {
    //Text(This.params)
    //展示this.parms,返回后再次进入依旧是http_response_content
  }
  .onReady((context: NavDestinationContext) => {
    this.pathStack = context.pathStack
    this.onPageReady()
  })
  .onHidden(()=>{
    this.onPageHide()
  })

首次页面能正常显示我传入参数返回的http的response的内容,后续我从该页面返回后,重新带新的参数返回时,页面内容依旧是上次收到response的内容,而且页面中的内容也没有因为我设置的onHidden()时变化成我重置的参数值,这令我比较困惑,同时http的日志打印内容如下

// 首次正常响应
{"responseCode":200 ……}
// 页面返回后,重新传参进入后再次进入
{"code":2300999,"message":"Unknown Other Error"}

感觉是我对生命周期的理解有问题啊,求助解决,希望重新传参进入时能够重新发起http请求并接收刷新这一组件的UI!


更多关于HarmonyOS 鸿蒙Next新人求助:5.0.2(14) 返回后重新携参进入,没有刷新页面,还处于原来的生命周期?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

7 回复

应该是onPageShow需要处理一下吧 要不显示页面的时候 新数据不刷新把

更多关于HarmonyOS 鸿蒙Next新人求助:5.0.2(14) 返回后重新携参进入,没有刷新页面,还处于原来的生命周期?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


理论上应该每次重新进入页面都会进入onPageShow这个周期吧,但我试了下onPageShow()和onBackPress()的时候重置,以及NavDestination(){}.onHidden()时也重置,我返回上一页面再重新传参进入,页面内容的变量值依旧是上次http响应的返回值,也并没有改为我重置的值之类的,很奇怪,然后http请求那打印报错信息`{“code”:2300999,“message”:“Unknown Other Error”}`,

有要学HarmonyOS AI的同学吗,联系我:https://www.itying.com/goods-1206.html

使用 emit,

是状态管理的问题吗?

相关的变量都是@State修饰的,

在HarmonyOS 5.0.2(14)中,页面返回后重新携参进入时,页面未刷新且仍处于原来的生命周期,可能是由于系统默认的页面缓存机制导致的。HarmonyOS为了提高页面切换的效率,默认会对页面进行缓存,以便在返回时快速恢复页面状态,而不是重新创建页面实例。

如果你希望页面在返回后重新携参进入时能够刷新,可以通过以下方式处理:

  1. 使用onPageShow生命周期回调:在页面的onPageShow方法中,检查是否有新的参数传入,并进行相应的数据刷新操作。

  2. 手动清除页面缓存:在页面返回时,可以调用router.clear()方法清除页面缓存,确保下次进入时重新创建页面实例。

  3. 使用router.replace代替router.push:在导航到新页面时,使用router.replace方法替换当前页面,而不是router.push,这样可以避免页面缓存的问题。

  4. onBackPress中处理:在页面的onBackPress生命周期回调中,可以手动触发页面刷新或清除缓存的操作。

通过这些方式,可以在页面返回后重新携参进入时,确保页面能够正确刷新并进入新的生命周期。

回到顶部