harmony 鸿蒙\@Once: Implementing Initialization Once
\@Once: Implementing Initialization Once
To initialize data only once and deny subsequent changes, you can use \@Once decorator together with \@Param decorator.
Before reading this topic, you are advised to read \@Param.
NOTE
The \@Once decorator is supported in custom components decorated by \@ComponentV2 since API version 12.
Overview
The \@Once decorator accepts values passed in only during variable initialization. When the data source changes, the decorator does not synchronize the changes to child components:
- \@Once must be used with \@Param. Using it independently or with other decorators is not allowed.
- \@Once does not affect the observation capability of \@Param. Only changes in data source are intercepted.
- The sequence of the variables decorated by \@Once and \@Param does not affect the actual features.
- When \@Once and \@Param are used together, you can change the value of \@Param variables locally.
Rules of Use
As an auxiliary decorator, the \@Once decorator does not have requirements on the decoration type and the capability of observing variables.
\@Once Variable Decorator | Description |
---|---|
Decorator parameters | None. |
Condition | It cannot be used independently and must be used together with the \@Param decorator. |
Constraints
- \@Once can be used only in custom components decorated by \@ComponentV2 and can be used only with \@Param.
@ComponentV2
struct MyComponent {
@Param @Once onceParam: string = "onceParam"; // Correct usage.
@Once onceStr: string = "Once"; // Incorrect usage. @Once cannot be used independently.
@Local @Once onceLocal: string = "onceLocal"; // Incorrect usage. @Once cannot be used with @Local.
}
@Component
struct Index {
@Once @Param onceParam: string = "onceParam"; // Incorrect usage.
}
- The order of \@Once and \@Param does not matter. Both \@Param \@Once and \@Once \@Param are correct.
@ComponentV2
struct MyComponent {
@Param @Once param1: number;
@Once @Param param2: number;
}
Use Scenarios
Initializing Variables Only Once
\@Once is used in the scenario where the expected variables synchronize the data source once during initialization and then stop synchronizing the subsequent changes.
@ComponentV2
struct ChildComponent {
@Param @Once onceParam: string = "";
build() {
Column() {
Text(`onceParam: ${this.onceParam}`)
}
}
}
@Entry
@ComponentV2
struct MyComponent {
@Local message: string = "Hello World";
build() {
Column() {
Text(`Parent message: ${this.message}`)
Button("change message")
.onClick(() => {
this.message = "Hello Tomorrow";
})
ChildComponent({ onceParam: this.message })
}
}
}
Changing the \@Param Variables Locally
When \@Once is used together with \@Param, the constraint that \@Param cannot be changed locally can be removed, and this change triggers UI re-rendering. In this case, using \@Param and \@Once is equivalent to using \@Local. The difference is that \@Param and \@Once can accept the external initialization passed in.
@ObservedV2
class Info {
@Trace name: string;
constructor(name: string) {
this.name = name;
}
}
@ComponentV2
struct Child {
@Param @Once onceParamNum: number = 0;
@Param @Once @Require onceParamInfo: Info;
build() {
Column() {
Text(`Child onceParamNum: ${this.onceParamNum}`)
Text(`Child onceParamInfo: ${this.onceParamInfo.name}`)
Button("changeOnceParamNum")
.onClick(() => {
this.onceParamNum++;
})
Button("changeParamInfo")
.onClick(() => {
this.onceParamInfo = new Info("Cindy");
})
}
}
}
@Entry
@ComponentV2
struct Index {
@Local localNum: number = 10;
@Local localInfo: Info = new Info("Tom");
build() {
Column() {
Text(`Parent localNum: ${this.localNum}`)
Text(`Parent localInfo: ${this.localInfo.name}`)
Button("changeLocalNum")
.onClick(() => {
this.localNum++;
})
Button("changeLocalInfo")
.onClick(() => {
this.localInfo = new Info("Cindy");
})
Child({
onceParamNum: this.localNum,
onceParamInfo: this.localInfo
})
}
}
}
你可能感兴趣的鸿蒙文章
harmony 鸿蒙\@AnimatableExtend Decorator: Definition of Animatable Attributes
harmony 鸿蒙Application State Management Overview
harmony 鸿蒙AppStorage: Storing Application-wide UI State
harmony 鸿蒙Basic Syntax Overview
harmony 鸿蒙\@Builder Decorator: Custom Builder Function
harmony 鸿蒙\@BuilderParam Decorator: Referencing the \@Builder Function
harmony 鸿蒙Creating a Custom Component
harmony 鸿蒙Mixing Use of Custom Components
harmony 鸿蒙Constraints on Access Modifiers of Custom Component Member Variables
- 所属分类: 后端技术
- 本文标签:
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦