@Require 装饰器:校验构造传参
@Require 是校验@Prop、@State、@Provide、@BuilderParam 和普通变量(无状态装饰器修饰的变量)是否需要构造传参的一个装饰器。
INFO
用了这个装饰器 父组件调用子组件的时候必须要转递参数和值 否则直接报错
概述
当@Require 装饰器和@Prop、@State、@Provide、@BuilderParam、普通变量(无状态装饰器修饰的变量)结合使用时,在构造该自定义组件时,@Prop、@State、@Provide、@BuilderParam 和普通变量(无状态装饰器修饰的变量)必须在构造时传参。
限制条件
@Require 装饰器仅用于装饰 struct 内的@Prop、@State、@Provide、@BuilderParam 和普通变量(无状态装饰器修饰的变量)。
使用场景
当 Child 组件内使用@Require 装饰器和@Prop、@State、@Provide、@BuilderParam 和普通变量(无状态装饰器修饰的变量)结合使用时,父组件 Index 在构造 Child 时必须传参,否则编译不通过。
bash
@Entry
@Component
struct Index {
@State message: string = 'Hello World';
@Builder buildTest() {
Row() {
Text('Hello, world')
.fontSize(30)
}
}
build() {
Row() {
Child({ initMessage: this.message, message: this.message,
buildTest: this.buildTest, initbuildTest: this.buildTest })
}
}
}
@Component
struct Child {
@Builder buildFuction() {
Column() {
Text('initBuilderParam')
.fontSize(30)
}
}
// 使用@Require标识父组件在构造Child组件时,必须使用构造传参;
@Require @BuilderParam buildTest: () => void;
@Require @BuilderParam initbuildTest: () => void = this.buildFuction;
@Require @Prop initMessage: string = 'Hello';
@Require @Prop message: string;
build() {
Column() {
Text(this.initMessage)
.fontSize(30)
Text(this.message)
.fontSize(30)
this.initbuildTest();
this.buildTest();
}
.width('100%')
.height('100%')
}
}