HarmonyOS 鸿蒙Next router.back()调用返回后的页面怎么自动刷新,我用的组件Refresh()
HarmonyOS 鸿蒙Next router.back()调用返回后的页面怎么自动刷新,我用的组件Refresh()
我用的是aboutToAppear(),大神给的是onPageShow(),我不知道到底该怎么选,重不重复,我也尝试把代码两个分开放或都放在aboutToAppear中,但都没得到想要的结果,没有自动刷新,且对onPageShow里面大神给的具体代码也没太搞懂,是怎么赋值的,一直在乱试。
代码具体代码如下:更多关于HarmonyOS 鸿蒙Next router.back()调用返回后的页面怎么自动刷新,我用的组件Refresh()的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
举个最简单的例子,上级页面是前一个页面,你通过上级页面跳转到下级页面,然后从下级页面通过router.back()返回上级页面,下级页面也可以通过左边侧滑返回上级页面,这时候会触发onBackPress方法,不过我看你文中的onBackPress方法不太对,这样写有问题,需要添加return true,表示页面自己处理返回逻辑,不加的话默认是false。参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs-V5/faqs-arkui-29-V5
demo代码如下:
// xxx.ets
import { router } from '@kit.ArkUI';
import { Logger } from '@ohos/utils';
@Entry
@Component
struct Test2 {
@State isRefreshing: boolean = false
@State arr: String[] = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10']
onPageShow(): void {
let params = router.getParams()
if (params) {
console.log('get value' + (params as Record<string, boolean>).refresh);
// 修改refresh组件的 refreshing 状态 = 参数refresh
this.isRefreshing = (params as Record<string, boolean>).refresh;
}
}
build() {
Column() {
Button("上级页面,点击跳转下级页面")
.onClick(() => {
router.pushUrl({
url: 'pages/Test3',
params: {}
}).catch((err: Error) => {
Logger.error(JSON.stringify(err));
});
})
Refresh({ refreshing: $$this.isRefreshing }) {
List() {
ForEach(this.arr, (item: string) => {
ListItem() {
Text('' + item)
.width('70%')
.height(80)
.fontSize(16)
.margin(10)
.textAlign(TextAlign.Center)
.borderRadius(10)
.backgroundColor(0xFFFFFF)
}
}, (item: string) => item)
}
}
.onRefreshing(() => {
setTimeout(() => {
this.isRefreshing = false
}, 2000)
console.log('onRefreshing test')
})
.backgroundColor(0x89CFF0)
.refreshOffset(64)
.pullToRefresh(true)
}
}
}
import { router } from '@kit.ArkUI';
@Entry
@Component
struct Test3 {
onBackPress() {
let options: router.RouterOptions = { url: 'pages/Test2', params: { refresh: true } }
router.back(options)
return true;
}
build() {
Column() {
Button("下级页面,点击返回上级页面")
.onClick(() => {
let options: router.RouterOptions = { url: 'pages/Test2', params: { refresh: true } }
router.back(options)
})
}
}
}
更多关于HarmonyOS 鸿蒙Next router.back()调用返回后的页面怎么自动刷新,我用的组件Refresh()的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
如果用到router.back传参来控制页面刷新,那肯定是在返回后的页面的onpageshow里获取参数,因为router.back返回前一个页面不会走aboutToAppear。
你可以打印一下看看有没有获取到参数,如果参数没问题那就要看看refresh组件部分有没有写错了
在HarmonyOS鸿蒙系统中,当你通过router.back()
方法返回到前一个页面时,如果需要自动刷新该页面,可以通过以下方式实现:
-
利用页面生命周期:在页面的
onPageReappeared
生命周期方法中,触发刷新逻辑。这个方法在页面重新出现在前台时会被调用,适合处理返回后的刷新需求。[@Entry](/user/Entry) [@Component](/user/Component) struct MyPage { @State refreshFlag: boolean = false; @OnReappear onPageReappeared() { this.refreshFlag = !this.refreshFlag; // 切换状态以触发刷新 } build() { Row() { Refresh({ refreshing: this.refreshFlag, onRefresh: this.handleRefresh }) { // 你的组件内容 } }.padding(20) } handleRefresh() { // 刷新逻辑处理 } }
-
使用全局状态管理:如果页面间的状态共享较复杂,可以考虑使用全局状态管理(如Context或Global Store)来通知页面进行刷新。
以上方法利用页面的生命周期和状态管理,实现了返回后的页面自动刷新。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html