当前位置: 首页 > java >正文

鸿蒙开发——2.ArkTS声明式开发(页面和自定义组件)

鸿蒙开发——2.ArkTS声明式开发:页面和自定义组件

      • 🌟 ArkUI组件生命周期全解析
        • 一、组件与页面的关系
        • 二、生命周期图解(组件的一生)
        • 三、核心生命周期方法
          • 页面级方法(大门守卫的职责)
          • 组件级方法(积木的自我管理)
        • 四、代码示例解析
        • 五、常见操作的生命周期轨迹
        • 六、最佳实践指南
        • 七、生命周期监听技巧(进阶)
        • 八、情景模拟测试

🌟 ArkUI组件生命周期全解析

一、组件与页面的关系
  1. 自定义组件
    👉 就像乐高积木块,用@Component装饰的UI单元

    • 可以重复使用(比如按钮、卡片模板)
    • 能组合多个系统组件(如Text + Image)
    • 示例:@Component struct MyButton { ... }
  2. 页面
    👉 像是由积木搭建的房子,用@Entry标记入口

    • 必须且只能有一个主入口(类似大门)
    • 包含多个组件构成完整界面
    • 示例:@Entry struct HomePage { ... }

二、生命周期图解(组件的一生)

在这里插入图片描述

(示意图说明:从创建到销毁的全过程)


三、核心生命周期方法
页面级方法(大门守卫的职责)
方法名触发场景典型用途
onPageShow页面显示(首次打开/切回前台)加载数据、启动动画
onPageHide页面隐藏(切到后台/跳转页面)暂停视频、保存临时数据
onBackPress点击返回按钮弹窗确认是否退出
组件级方法(积木的自我管理)
方法名触发时机注意事项
aboutToAppear组件创建后,显示前初始化非UI数据
onDidBuild组件首次渲染完成适合数据埋点、性能统计
aboutToDisappear组件被移除前禁止修改状态变量

四、代码示例解析

在这里插入图片描述

// 父页面组件
@Entry
@Component
struct ParentPage {@State showChild: boolean = true;// 页面显示时触发(类似APP启动)onPageShow() {console.log('客厅灯亮了');}// 组件准备就绪时aboutToAppear() {console.log('家具搬进来了');}build() {Column() {if (this.showChild) {ChildComponent() // 子组件创建时会触发自己的aboutToAppear}Button('移除子组件').onClick(() => {this.showChild = false; // 触发子组件的aboutToDisappear})}}
}// 子组件
@Component
struct ChildComponent {// 组件即将消失时aboutToDisappear() {console.log('小部件被收进抽屉');}build() {Text('我是可拆卸部件')}
}

五、常见操作的生命周期轨迹
  1. 冷启动应用
    父组件aboutToAppear → 父组件build → 子组件aboutToAppear → 子组件build → onPageShow

  2. 删除子组件
    点击按钮 → 子组件aboutToDisappear → 父组件重新渲染

  3. 页面跳转

    • pushUrl:当前页onPageHide,新页执行初始化流程
    • replaceUrl:当前页会被销毁,触发aboutToDisappear
  4. 应用退到后台
    onPageHide触发 → 重新打开时触发onPageShow


六、最佳实践指南
  1. 初始化操作

    • 网络请求 → 放在aboutToAppear
    • 动画启动 → 放在onPageShow
  2. 清理操作

    • 取消定时器 → aboutToDisappear
    • 释放资源 → onPageHide
  3. 避免的坑
    ❌ 不要在aboutToDisappear里改状态变量(会导致不稳定)
    ❌ 避免在onDidBuild做耗时操作(影响渲染性能)


七、生命周期监听技巧(进阶)
// 在任意组件监听页面状态
@Component
struct MyComponent {aboutToAppear() {// 注册监听uiObserver.on('routerPageUpdate', (info) => {if (info.state === '显示') {console.log('监听到页面显示了!');}});}
}

小贴士:这种监听方式就像在房间里装感应器,能知道大门何时开闭


八、情景模拟测试

场景:购物车页面

  • 进入时onPageShow加载商品数据
  • 添加商品时子组件执行aboutToAppear
  • 删除商品时子组件触发aboutToDisappear
  • 切到后台onPageHide保存未结算商品
  • 返回按钮onBackPress提示"还有未支付商品"

学习路径建议
先掌握基础生命周期 → 通过调试console观察调用顺序 → 尝试复杂组件嵌套 → 最后实践状态管理

http://www.xdnf.cn/news/4436.html

相关文章:

  • HTTP请求与缓存、页面渲染全流程
  • 【Java ee 初阶】多线程(8)
  • Redis再次开源!reids8.0.0一键安装脚本分享
  • CentOS算法部署
  • ROS2: 服务通信
  • 机器学习实操 第二部分 神经网路和深度学习 第14章 使用卷积神经网络进行深度计算机视觉
  • 精益数据分析(48/126):UGC商业模式的指标剖析与运营策略
  • 8. HTML 表单基础
  • PostgreSQL给新用户授权select角色
  • 【C++】类和对象(下)
  • day009-用户管理专题
  • 304.不同的二叉搜索树
  • mysql:什么是一致性视图(Read View)
  • AI应用开发实战分享
  • C++模板
  • Python引领前后端创新变革,重塑数字世界架构
  • ✍️【TS类型体操进阶】挑战类型极限,成为类型魔法师![特殊字符]♂️✨
  • iTwin 数据报表(只是简单的原型不代表实现)
  • python 使用 mongodb 的一些方法
  • Spring Boot 中如何解决 CORS 问题(详解)
  • 【Java ee 初阶】多线程(9)上
  • Redis从入门到实战 - 高级篇(上)
  • day 14 SHAP可视化
  • Android学习总结之Binder篇
  • 空间数据分析新趋势:AI 与 ArcGIS Pro 的协同创新
  • 从零开始学习three.js(15):一文详解three.js中的纹理映射UV
  • 经典密码学算法实现
  • Apache Calcite 详细介绍
  • 2025年五一假期旅游市场新趋势:理性消费、多元场景与科技赋能
  • MySQL关于锁的面试题