HarmonyOS 鸿蒙Next ArkTs: 请问下router.getParams()获取的参数使用完如何清理掉?建议增加清理param数据的方法

发布于 1周前 作者 wuwangju 来自 鸿蒙OS

HarmonyOS 鸿蒙Next ArkTs: 请问下router.getParams()获取的参数使用完如何清理掉?建议增加清理param数据的方法

请问下router.getParams()获取的参数使用完如何清理掉?

现在遇到的问题是B返回A页面,A中router.getParams()处理数据会自动打开页面C,但是C中back时A的onPageShow中router.getParams()还会获取到B返回携带的参数;

这样的已经处理过的数据还存在,会污染业务逻辑。

router.clear只能清理pages堆栈,参数不会清理。

建议增加清理param数据的方法,比如router.clearParams()


更多关于HarmonyOS 鸿蒙Next ArkTs: 请问下router.getParams()获取的参数使用完如何清理掉?建议增加清理param数据的方法的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

11 回复

我目前的做法是增加打开页面标志pageFlag

具体做法:A打开B时,A中的pageFlag = B的path

onPageShow方法中判断pageFlag=B,处理B的返回值;

onPageShow方法的最后将pageFlag置空。

更多关于HarmonyOS 鸿蒙Next ArkTs: 请问下router.getParams()获取的参数使用完如何清理掉?建议增加清理param数据的方法的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


哈哈,天下苦 HO API9 久矣,太多问题和bug了。看了OH的 API10、11 也没有新增类似清除脏params的方法,也不知道新版是不是有同样的问题。

我的业务场景是可以确定返回页面的URL,在返回的时候可以判断逻辑,如果需要清空,用个空Object把之前的覆盖掉。类似于这样:

onBackPress() {
  router.back({
    url: 'URL',
    params: {} // params必须要有,不然也不会清掉
  })
  return true
}

那你试过A打开B,B带回数据后,A处理完;从A切回桌面,再从桌面切回A,依然会读取B返回的数据再执行一遍吗

遇到同样问题,无语的很,有解决办法吗?或者替代方式?

蹲个后续

router.back()一个空Object可以吗?

感谢提供思路,这个方法可行:

router.back(1, {//清空param,防止切后台再切前台再次弹出二维码扫描页面 params: {} })

习惯就好,有时候开发,看官方文档也有好多坑

图片

同样存在这个问题。

我测试的时候3.1 版本有这样的问题,4.1版本暂时没有发现这样的问题,你可以升级IDE试一试

我测试的4.0 同样存在这个问题,暂时找不到4.1版本的下载。

在HarmonyOS鸿蒙系统的ArkTS框架中,router.getParams() 方法用于获取路由传递的参数。关于你提到的如何清理这些参数的问题,目前在ArkTS的官方API文档中并未直接提供清理router.getParams()获取参数的方法。

通常,路由参数的生命周期与页面或组件的生命周期相关。当页面或组件被销毁时,其相关的参数理论上也应该随之释放。如果你希望在参数使用完毕后立即清理,可以考虑以下几种方式(尽管这些不是官方直接提供的方法):

  1. 手动置空:将获取到的参数对象手动设置为null或空对象,以减少对内存的无谓占用。但这并不会真正“清理”内存,只是断开了引用。

  2. 作用域控制:确保参数只在需要的作用域内有效,一旦作用域结束,参数将自动失去作用。

  3. 内存管理:依赖ArkTS和JavaScript的内存管理机制,当没有引用指向这些参数时,垃圾回收器会自动回收内存。

由于ArkTS是基于TypeScript的扩展,其内存管理遵循JavaScript的原则,因此大多数情况下不需要手动清理内存。如果你确实遇到了内存泄漏的问题,建议检查参数的使用方式,确保没有不必要的全局引用或循环引用。

如果问题依旧没法解决请联系官网客服, 官网地址是 https://www.itying.com/category-93-b0.html

回到顶部