# 14.4:@Once
@Once 装饰器表示变量只允许外界对其初始化一次,它必须配合 @Param 修饰器一起使用才有效果。
# 14.4.1:约束与限制
- @Once 装饰器必须和 @Param 一起使用才有效果
- @Once 和 @Param 配合使用等同于 @Local 装饰器
- @Once 和 @Param 配合使用时必须初始化,否则编译报错
# 14.4.2:@Once的简单使用
@Once 使用在期望变量仅初始化时同步数据源一次,之后不再继续同步变化的场景,
@Entry @ComponentV2 struct Page_03_prop {
@Local message: string = "message"
build() {
Column({space: 10}) {
Text("message = " + this.message)
.fontSize(22)
.onClick(() => {
this.message = new Date().toLocaleTimeString() // 修改message的值,不会同步给子组件
})
CustomButton({
message1: this.message, // 只给message1初始化一次,之后message的值变化不会再同步给message1
message2: this.message // 只给message1初始化一次,之后message的值变化不会再同步给message2
})
}
.width('100%')
.height("100%")
}
}
@ComponentV2 struct CustomButton {
@Param @Once message1: string = "message1"
@Once @Param message2: string = "message2"
build() {
Column({space: 10}) {
Text("message1 = " + this.message1)
.fontSize(22)
Text("message2 = " + this.message2)
.fontSize(22)
.onClick(() => {
this.message1 = new Date().toLocaleTimeString(); // @Param和@Once等同于@Local,允许修改
this.message2 = this.message1; // @Param和@Once等同于@Local,允许修改
})
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

请作者喝杯咖啡
©arkui.club版权所有,禁止私自转发、克隆网站。