渐进式编程课
鸿蒙 目录
第 55 课2026.09.17

让按钮点击调用上一课同一个 Handle 的关闭动作。

第 55 课:按钮点击触发关闭

  • 日期:2026-09-17
  • 课程序号:第 55 课
  • 知识点:按钮点击触发关闭

用途

让按钮点击调用上一课同一个 Handle 的关闭动作。

核心概念

Button.onClick 调用 handle.close();enabled 继续读取 handle.isClosed()。本课只验证动作被触发,异步期间的视觉刷新留给下一课。

最小代码或操作示例

ts
@Entry
@Component
struct ClosePage {
  private handle: Handle = new Handle(async (): Promise<void> => {
    console.info('release once')
  })

  build() {
    Button('关闭资源')
      .enabled(!this.handle.isClosed())
      .onClick(() => { this.handle.close() })
  }
}

3~5 分钟练习

点击两次按钮,观察底层释放日志出现几次。

参考答案

底层 releaseFn 只执行一次;Handle.close() 的幂等契约来自第 50 课。本课尚未加入异步界面状态,不能仅凭这段示例断言按钮已经重绘。

与上一课的联系

沿用第 54 课的 ClosePage、handle 与 .enabled(!this.handle.isClosed());本课只增加点击调用 handle.close();下一课可在异步关闭期间显示进行中状态并触发完成后的重绘。

时效校验

时效校验:2026-09-24(华为当前 Button 使用指南与禁用控制文档;本机 HarmonyOS 26.0.0/API 26 SDK)。onClick、enabled 自 API 7 可用,未见 @deprecated 或 @useinstead。

官方参考