ArkUI使用makeObserved接口:将非观察数据变为可观察数据指南文档示例
介绍
本示例通过使用ArkUI指南文档中各场景的开发示例,展示在工程中,帮助开发者更好地理解ArkUI提供的组件及组件属性并合理使用。该工程中展示的代码详细描述可查如下链接:
1.线性容器(Column)
2.文本显示器(Text)
3.Button
4.makeObserved接口:将非观察数据变为可观察数据
预览效果
import { UIUtils } from '@kit.ArkUI';
class Person {
age: number = 10;
}
class Info {
id: number = 0;
person: Person = new Person();
}
@Entry
@Component
struct Index {
@State message: Info = new Info();
@State message2: Info = UIUtils.makeObserved(this.message); // 不会抛异常
build() {
Column() {
Text(`${this.message2.person.age}`)
.onClick(() => {
// UI不会刷新,因为State只能观察到第一层的变化
this.message2.person.age++;
})
}
}
}

使用说明
1.在进入主页面后,点击页面按钮进行查看
工程目录结构
MakeObserved
├─ AppScope
│ ├─ app.json5
│ └─ resources
│ └─ base
│ ├─ element
│ │ └─ string.json
│ └─ media
│ ├─ background.png
│ ├─ foreground.png
│ └─ layered_image.json
├─ code-linter.json5
├─ entry
│ ├─ hvigorfile.ts
│ ├─ obfuscation-rules.txt
│ ├─ oh-package.json5
│ └─ src
│ ├─ main
│ │ ├─ ets
│ │ │ ├─ common
│ │ │ │ └─ MyComponent.ets
│ │ │ ├─ entryability
│ │ │ │ └─ EntryAbility.ets
│ │ │ ├─ entrybackupability
│ │ │ │ └─ EntryBackupAbility.ets
│ │ │ ├─ Model
│ │ │ │ └─ modelView.ets
│ │ │ ├─ pages
│ │ │ │ └─ Index.ets
│ │ │ └─ View
│ │ │ ├─ Page1.ets
│ │ │ ├─ Page10.ets
│ │ │ ├─ Page2.ets
│ │ │ ├─ Page3.ets
│ │ │ ├─ Page4.ets
│ │ │ ├─ Page5.ets
│ │ │ ├─ Page6.ets
│ │ │ ├─ Page7.ets
│ │ │ ├─ Page8.ets
│ │ │ └─ Page9.ets
│ │ ├─ module.json5
│ │ └─ resources
│ │ ├─ base
│ │ │ ├─ element
│ │ │ │ ├─ color.json
│ │ │ │ ├─ float.json
│ │ │ │ └─ string.json
│ │ │ ├─ media
│ │ │ │ ├─ background.png
│ │ │ │ ├─ foreground.png
│ │ │ │ ├─ layered_image.json
│ │ │ │ └─ startIcon.png
│ │ │ └─ profile
│ │ │ ├─ backup_config.json
│ │ │ └─ main_pages.json
│ │ ├─ dark
│ │ │ └─ element
│ │ │ └─ color.json
│ │ └─ rawfile
│ ├─ mock
│ │ └─ mock-config.json5
│ ├─ ohosTest
│ │ ├─ ets
│ │ │ └─ test
│ │ │ ├─ Ability.test.ets
│ │ │ ├─ index.test.ets
│ │ │ └─ List.test.ets
│ │ └─ module.json5
│ └─ test
│ ├─ List.test.ets
│ └─ LocalUnit.test.ets
├─ hvigor
│ └─ hvigor-config.json5
├─ hvigorfile.ts
├─ index.test.ets
├─ oh-package-lock.json5
├─ oh-package.json5
├─ ohoTest.md
└─ README_zh.md
具体实现
- 导入UIUtils模块并使用makeObserved接口
- 处理不同类型数据的可观察转换
- 与状态管理装饰器(@Local等)配合使用
- 支持集合类型(collections.Array/Map/Set)的可观察转换
- 为了将普通不可观察数据变为可观察数据,开发者可以使用makeObserved接口,makeObserved可以在@Trace无法标记的情况下使用。
亮点功能:
- 与@Sendable装饰类配合使用,支持跨线程数据传递后的可观察转换
- 处理JSON.parse返回的匿名对象的可观察转换
相关权限
不涉及。
依赖
不涉及。
约束与限制
-
本示例仅支持标准系统上运行, 支持设备:华为手机。
-
HarmonyOS系统:HarmonyOS 5.0.5 Release及以上。
-
DevEco Studio版本:6.0.0 Release及以上。
-
HarmonyOS SDK版本:HarmonyOS 6.0.0 Release SDK及以上。
下载
如需单独下载本工程,执行如下命令:
git init
git config core.sparsecheckout true
echo ArkUISample/MakeObserved > .git/info/sparse-checkout
git remote add origin https://gitcode.com/harmonyos_samples/guide-snippets.git
git pull origin master