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