HarmonyOS鸿蒙Next中官方AI建议使用router.pushUrl()等方法,但编译时依然报'已废弃'的警告

HarmonyOS鸿蒙Next中官方AI建议使用router.pushUrl()等方法,但编译时依然报’已废弃’的警告 我们在基于API 10+开发时,按照官方AI的建议使用router.pushUrl()等方法,但编译时依然报’已废弃’的警告。请问在API 10+的正式环境中:

页面跳转和返回的终极正确写法是什么? 是继续使用这些方法但需要特定配置,还是必须更换为全新的API(例如UIContext中的Router实例或其他新方法)?

能否提供一个在API 10+下,包含跳转、传参、接收参数和返回的完整、可运行的代码示例? 特别是返回时,router.back()的正确替代方案到底是什么?

我们的开发环境(DevEco Studio、SDK)是否需要升级到特定版本,才能完全兼容API 10+的这些新规范?


更多关于HarmonyOS鸿蒙Next中官方AI建议使用router.pushUrl()等方法,但编译时依然报'已废弃'的警告的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

从API version 9开始支持,从API version 18开始废弃,建议使用UIContext中的getRouter获取Router实例,再通过此实例调用替代方法pushUrl。

从API version 10开始,可以通过使用UIContext中的getRouter方法获取当前UI上下文关联的Router对象。

正确写法可参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-uicontext-router#back

示例代码可参考社区技术支持答复:https://developer.huawei.com/consumer/cn/forum/topic/0203195584177323275?fid=0109140870620153026

当前不需要升级到特定版本,也可以尝试更新deveco,API20增加了许多新API接口功能

更多关于HarmonyOS鸿蒙Next中官方AI建议使用router.pushUrl()等方法,但编译时依然报'已废弃'的警告的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


是不是兼容版本(compatibleSdkVersion)没有标识到api10,我之前也是因为没有正确设置这个,导致使用api时黄线警告(废弃或不兼容)。
例如兼容到17:"compatibleSdkVersion": "5.0.5(17)"

鸿蒙Next中官方AI建议使用router.pushUrl()等方法,但编译时依然报’已废弃’的警告,这是因为部分API在HarmonyOS Next中已被标记为废弃,但AI建议可能未及时更新。请检查当前使用的API版本,并查阅HarmonyOS Next官方文档,确认router.pushUrl()等方法的当前推荐用法。

在HarmonyOS Next API 10+中,router.pushUrl()等全局router方法已被标记为废弃,这是为了推动开发者使用更符合ArkUI声明式范式和安全访问控制的UIContext.Router API。编译警告是正常的,表明你正在使用的API已进入废弃周期。

终极正确写法是使用UIContext中的Router实例。

你需要通过组件的UIContext来获取与当前UI组件树关联的Router对象。这确保了路由操作拥有正确的UI上下文,是ArkTS声明式UI架构的推荐做法。

核心变更点:

  1. 不再使用全局的 router.pushUrl(), router.back(), router.clear() 等。
  2. 改为使用 this.getUIContext().router.pushUrl(), this.getUIContext().router.back() 等。

API 10+ 完整代码示例:

// 1. 发起跳转并传递参数 (在Index页面)
import { router } from '@kit.ArkUI';

@Entry
@Component
struct Index {
  // 获取UIContext中的Router
  private router: router.Router = this.getUIContext().router;

  build() {
    Column() {
      Button('跳转到Detail页')
        .onClick(() => {
          // 使用UIContext的router进行跳转
          this.router.pushUrl({
            url: 'pages/Detail', // 目标页面路径
            params: { id: 123, message: 'Hello from Index' } // 传递参数
          } as router.RouterOptions);
        })
    }
  }
}

// 2. 接收参数及返回 (在Detail页面)
@Entry
@Component
struct Detail {
  // 通过@State或Prop接收参数
  @State id: number = 0;
  @State message: string = '';

  // 声明本地路由对象
  private router: router.Router = this.getUIContext().router;

  onPageShow() {
    // 获取传递的参数
    const params = this.router.getParams();
    if (params) {
      this.id = params['id'] as number;
      this.message = params['message'] as string;
    }
  }

  build() {
    Column() {
      Text(`ID: ${this.id}`)
      Text(`Message: ${this.message}`)
      Button('返回上一页')
        .onClick(() => {
          // 使用UIContext的router返回
          this.router.back();
        })
      Button('返回并传递结果')
        .onClick(() => {
          this.router.back({
            url: 'pages/Index',
            params: { result: 'Data from Detail' } // 返回时可携带参数
          } as router.RouterOptions);
        })
    }
  }
}

关于开发环境: 是的,你需要将DevEco Studio和配套的SDK升级到支持API 10+的版本(例如4.1 Release或更高版本),以确保工具链完全支持新的API规范、提供正确的语法提示并消除兼容性问题。请在官网下载最新IDE和SDK。

回到顶部