# 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
请作者喝杯咖啡

津公网安备 12011402001367号

津ICP备2020008934号-2

中央网信办互联网违法和不良信息举报中心

天津市互联网违法和不良信息举报中心