鸿蒙开发实践案例分析——@Require装饰器详解
本文介绍了HarmonyOS开发中@Require装饰器的使用方法和限制条件。@Require需与@Prop、@State、@Provide、@BuilderParam等装饰器结合使用,强制要求这些变量在组件构造时必须传参。文章通过正反示例展示了其应用场景:正确使用时父组件需传值,否则会导致编译错误。该功能从API 11开始逐步支持不同变量类型的校验,为开发提供更严格的参数检查机制。
📝往期推文全新看点(文中附带最新·鸿蒙全栈学习笔记)
1️⃣ 市场巨变,移动开发行业即将迎来“第二春”?
2️⃣ 鸿蒙应用开发与鸿蒙系统开发哪个更有前景?
3️⃣ 嵌入式开发适不适合做鸿蒙南向开发?看完这篇你就了解了~
4️⃣ 对于大前端开发来说,转鸿蒙开发究竟是福还是祸?
5️⃣ 鸿蒙岗位需求突增!移动端、PC端、IoT到底该怎么选?
6️⃣ 记录一场鸿蒙开发岗位面试经历~
7️⃣ 持续更新中……
@Require是校验@Prop、@State、@Provide、@BuilderParam和普通变量(无状态装饰器修饰的变量)是否需要构造传参的一个装饰器。
说明:
从API version 11开始对@Prop/@BuilderParam进行校验。
从API version 12开始对@State/@Provide/普通变量(无状态装饰器修饰的变量)进行校验。
概述
当@Require装饰器和@Prop、@State、@Provide、@BuilderParam、普通变量(无状态装饰器修饰的变量)结合使用时,在构造该自定义组件时,@Prop、@State、@Provide、@BuilderParam和普通变量(无状态装饰器修饰的变量)必须在构造时传参。
限制条件
@Require装饰器仅用于装饰struct内的@Prop、@State、@Provide、@BuilderParam和普通变量(无状态装饰器修饰的变量)。
使用场景
当Child组件内使用@Require装饰器和@Prop、@State、@Provide、@BuilderParam和普通变量(无状态装饰器修饰的变量)结合使用时,父组件Index在构造Child时必须传参,否则编译不通过。
@Entry
@Component
struct Index {
@State message: string = 'Hello World';
@Builder buildTest() {
Row() {
Text('Hello, world')
.fontSize(30)
}
}
build() {
Row() {
Child({ regular_value: this.message, state_value: this.message, provide_value: this.message, initMessage: this.message, message: this.message,
buildTest: this.buildTest, initbuildTest: this.buildTest })
}
}
}
@Component
struct Child {
@Builder buildFuction() {
Column() {
Text('initBuilderParam')
.fontSize(30)
}
}
@Require regular_value: string = 'Hello';
@Require @State state_value: string = "Hello";
@Require @Provide provide_value: string = "Hello";
@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%')
}
}
错误场景
@Entry
@Component
struct Index {
@State message: string = 'Hello World';
@Builder buildTest() {
Row() {
Text('Hello, world')
.fontSize(30)
}
}
build() {
Row() {
Child()
}
}
}
@Component
struct Child {
@Builder buildFuction() {
Column() {
Text('initBuilderParam')
.fontSize(30)
}
}
// 使用@Require必须构造时传参。
@Require regular_value: string = 'Hello';
@Require @State state_value: string = "Hello";
@Require @Provide provide_value: string = "Hello";
@Require @BuilderParam initbuildTest: () => void = this.buildFuction;
@Require @Prop initMessage: string = 'Hello';
build() {
Column() {
Text(this.initMessage)
.fontSize(30)
this.initbuildTest();
}
}
}
更多推荐
所有评论(0)