• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# \@Require装饰器:校验构造传参
2
3
4\@Require是校验\@Prop和\@BuilderParam是否需要构造传参的一个装饰器, \@Require装饰器不能单独使用。
5
6
7> **说明:**
8>
9> 从API version 11开始使用。
10
11## 概述
12
13当\@Require装饰器和\@Prop或者\@BuilderParam结合使用时,在构造该自定义组件时,\@Prop和\@BuilderParam必须在构造时传参。\@Require是校验\@Prop或者\@BuilderParam是否需要构造传参的一个装饰器。
14
15## 限制条件
16
17 \@Require装饰器仅用于装饰struct内的\@Prop和\@BuilderParam成员状态变量。
18
19## 使用场景
20
21当Child组件内使用\@Require装饰器和\@Prop或者\@BuilderParam结合使用时,父组件Index在构造Child时必须传参,否则编译不通过。
22
23```ts
24@Entry
25@Component
26struct Index {
27  @State message: string = 'Hello World';
28
29  @Builder buildTest() {
30    Row() {
31      Text('Hello, world')
32        .fontSize(30)
33    }
34  }
35
36  build() {
37    Row() {
38      Child({ initMessage: this.message, message: this.message,
39        buildTest: this.buildTest, initbuildTest: this.buildTest })
40    }
41  }
42}
43
44@Component
45struct Child {
46  @Builder buildFuction() {
47    Column() {
48      Text('initBuilderParam')
49        .fontSize(30)
50    }
51  }
52
53  @Require @BuilderParam buildTest: () => void;
54  @Require @BuilderParam initbuildTest: () => void = this.buildFuction;
55  @Require @Prop initMessage: string = 'Hello';
56  @Require @Prop message: string;
57
58  build() {
59    Column() {
60      Text(this.initMessage)
61        .fontSize(30)
62      Text(this.message)
63        .fontSize(30)
64      this.initbuildTest();
65      this.buildTest();
66    }
67    .width('100%')
68    .height('100%')
69  }
70}
71```
72
73 ![img](figures/9e2d58bc-b0e1-4613-934b-8e4237bd5c05.png)
74
75## 错误场景
76
77```
78@Entry
79@Component
80struct Index {
81  @State message: string = 'Hello World';
82
83  @Builder buildTest() {
84    Row() {
85      Text('Hello, world')
86        .fontSize(30)
87    }
88  }
89
90  build() {
91    Row() {
92      Child()
93    }
94  }
95}
96
97@Component
98struct Child {
99  @Builder buildFuction() {
100    Column() {
101      Text('initBuilderParam')
102        .fontSize(30)
103    }
104  }
105  // 使用@Require必须构造时传参。
106  @Require @BuilderParam initbuildTest: () => void = this.buildFuction;
107  @Require @Prop initMessage: string = 'Hello';
108
109  build() {
110    Column() {
111      Text(this.initMessage)
112        .fontSize(30)
113      this.initbuildTest();
114    }
115  }
116}
117```
118
119