@Once:初始化同步一次
介绍
本示例展示了@Once:初始化同步一次装饰器的使用方法:
- @Once用于期望变量仅初始化同步数据源一次,之后不再继续同步变化的场景;
- 当@Once与@Param结合使用时,可以解除@Param无法在本地修改的限制,并能够触发UI刷新。此时,使用@Param和@Once的效果类似于@Local,但@Param和@Once还能接收外部传入的初始值;
效果预览
1.变量仅初始化同步一次
| 应用初始页面 | 任务完成界面 |
|---|---|
![]() |
![]() |
2.本地修改@Param变量
| 应用初始页面 | 任务完成界面 |
|---|---|
![]() |
![]() |
使用说明
- 必须搭配@Param仅能与@Param共同使用,不可单独使用或与@State、@Local等其它装饰器搭配,且仅支持@ComponentV2组件(API 12+)。
- 初始化仅同步一次:变量初始化时接收外部传入值,后续外部数据源变化时,子组件变量不再同步更新。
- 允许本地修改:解除@Param 默认“不可本地修改”的限制,修改后可触发UI刷新,且不影响外部数据源。
测试代码说明
执行测试用例会先打开相应界面,然后会将界面上的按钮点击一遍,演示初始化同步数据源。
工程目录
entry/src/
├── main
│ ├── ets
│ │ ├── entryability
│ │ ├── entrybackupability
│ │ └── pages
│ │ ├── Index.ets //变量仅初始化同步一次界面
│ │ └── MyComponent.ets //本地修改@Param变量界面
│ ├── module.json5
│ └── resources
└── ohosTest
└── ets
└── test
├── Ability.test.ets // 自动化测试代码
└── List.test.ets // 测试套执行列表
具体实现
- 创建@ComponentV2装饰的父组件(如 Index)和子组件(如 Child),父组件定义@Local变量作为数据源(如数字、对象)。
- 子组件中用@Param @Once声明变量(支持基础类型和对象),指定初始值,若为必传参数可搭配@Require。
- 父组件在构建子组件时,将@Local变量作为参数传递给子组件的@Param @Once变量,完成初始化。
- 父组件添加按钮交互修改自身@Local变量,子组件添加按钮交互修改自身@Param @Once变量。
- 运行程序,验证父组件修改数据源时子组件值不变,子组件修改本地变量时UI独立刷新。
相关权限
不涉及。
依赖
不涉及。
约束与限制
-
本示例仅支持标准系统上运行, 支持设备:华为手机。
-
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/ArktsNewOnce/ > .git/info/sparse-checkout
git remote add origin https://gitcode.com/harmonyos_samples/guide-snippets.git
git pull origin master



