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
应该是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为了提高页面切换的效率,默认会对页面进行缓存,以便在返回时快速恢复页面状态,而不是重新创建页面实例。
如果你希望页面在返回后重新携参进入时能够刷新,可以通过以下方式处理:
-
使用
onPageShow
生命周期回调:在页面的onPageShow
方法中,检查是否有新的参数传入,并进行相应的数据刷新操作。 -
手动清除页面缓存:在页面返回时,可以调用
router.clear()
方法清除页面缓存,确保下次进入时重新创建页面实例。 -
使用
router.replace
代替router.push
:在导航到新页面时,使用router.replace
方法替换当前页面,而不是router.push
,这样可以避免页面缓存的问题。 -
在
onBackPress
中处理:在页面的onBackPress
生命周期回调中,可以手动触发页面刷新或清除缓存的操作。
通过这些方式,可以在页面返回后重新携参进入时,确保页面能够正确刷新并进入新的生命周期。