1# ArkUI子系统变更说明 2 3## cl.arkui.1 @Require装饰器增加对@State/@Provide/普通变量(无状态装饰器修饰的变量)校验的变更 4 5**访问级别** 6 7公开接口 8 9**变更原因** 10 11开发者提出,当使用@Require修饰@State/@Provide/常规成员变量时,需要进行构造赋值校验。 12 13**变更影响** 14 15变更前:@Require支持校验的装饰器有@Prop和@BuilderParam。 16 17变更后:@Require支持校验的装饰器有@Prop、@BuilderParam、@State、@Provide和普通变量(无状态装饰器修饰的变量)。 18 19错误示例如下: 20 21```ts 22@Entry 23@Component 24struct Index { 25 @State message: string = 'Hello World'; 26 27 @Builder buildTest() { 28 Row() { 29 Text('Hello, world') 30 .fontSize(30) 31 } 32 } 33 34 build() { 35 Row() { 36 Child() 37 } 38 } 39} 40 41@Component 42struct Child { 43 @Builder buildFuction() { 44 Column() { 45 Text('initBuilderParam') 46 .fontSize(30) 47 } 48 } 49 // 使用@Require必须构造时传参。 50 @Require regular_value: string = 'Hello'; 51 @Require @State state_value: string = "Hello"; 52 @Require @Provide provide_value: string = "Hello"; 53 @Require @BuilderParam initbuildTest: () => void = this.buildFuction; 54 @Require @Prop initMessage: string = 'Hello'; 55 56 build() { 57 Column() { 58 Text(this.initMessage) 59 .fontSize(30) 60 this.initbuildTest(); 61 } 62 } 63} 64``` 65 66正确示例如下: 67```ts 68@Entry 69@Component 70struct Index { 71 @State message: string = 'Hello World'; 72 73 @Builder buildTest() { 74 Row() { 75 Text('Hello, world') 76 .fontSize(30) 77 } 78 } 79 80 build() { 81 Row() { 82 Child({ regular_value: this.message, state_value: this.message, provide_value: this.message, initMessage: this.message, message: this.message, 83 buildTest: this.buildTest, initbuildTest: this.buildTest }) 84 } 85 } 86} 87 88@Component 89struct Child { 90 @Builder buildFuction() { 91 Column() { 92 Text('initBuilderParam') 93 .fontSize(30) 94 } 95 } 96 @Require regular_value: string = 'Hello'; 97 @Require @State state_value: string = "Hello"; 98 @Require @Provide provide_value: string = "Hello"; 99 @Require @BuilderParam buildTest: () => void; 100 @Require @BuilderParam initbuildTest: () => void = this.buildFuction; 101 @Require @Prop initMessage: string = 'Hello'; 102 @Require @Prop message: string; 103 104 build() { 105 Column() { 106 Text(this.initMessage) 107 .fontSize(30) 108 Text(this.message) 109 .fontSize(30) 110 this.initbuildTest(); 111 this.buildTest(); 112 } 113 .width('100%') 114 .height('100%') 115 } 116} 117``` 118 119**起始API Level** 120 121起始支持版本为 API 12。 122 123**变更发生版本** 124 125从OpenHarmony SDK 5.0.0.12开始。 126 127**适配指导** 128 129开发者需要根据告警提示信息,对@Require变量的赋值进行适配整改。 130 131**参考文档** 132 133[@Require装饰器:校验构造传参](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/quick-start/arkts-require.md) 134 135 136## cl.arkui.2 编译转换增加对自定义组件成员属性访问限定符的使用限制 137 138**访问级别** 139 140公开接口 141 142**增加原因** 143 144开发者提出,当不按规范使用访问限定符private/public/protected时,需要进行编译校验。 145 146**增加影响** 147 148控制台输出告警日志信息。 149 150错误使用示例如下: 151 1521.当成员变量被private访问限定符和@State/@Prop/@Provide/@BuilderParam装饰器同时修饰时,使用父组件AccessRestrictions调用自定义组件ComponentsChild,对自定义组件ComponentsChild进行构造赋值,因为自定义组件ComponentsChild的private是私有的不支持外部构造赋值,所以ArkTS会进行校验并产生告警日志。 153 154```ts 155@Entry 156@Component 157struct AccessRestrictions { 158 @Builder buildTest() { 159 Text("Parent builder") 160 } 161 build() { 162 Column() { 163 ComponentsChild({state_value: "Hello", prop_value: "Hello", provide_value: "Hello", builder_value: this.buildTest, regular_value: "Hello"}) 164 } 165 .width('100%') 166 } 167} 168 169@Component 170struct ComponentsChild { 171 @State private state_value: string = "Hello"; 172 @Prop private prop_value: string = "Hello"; 173 @Provide private provide_value: string = "Hello"; 174 @BuilderParam private builder_value: () => void = this.buildTest; 175 private regular_value: string = "Hello"; 176 @Builder buildTest() { 177 Text("Child builder") 178 } 179 build() { 180 Column() { 181 Text("Hello") 182 .fontSize(50) 183 .fontWeight(FontWeight.Bold) 184 } 185 } 186} 187``` 188 1892.当成员变量被public访问限定符和@StorageLink/@StorageProp/@LocalStorageLink/@Consume装饰器同时修饰时,因为@StorageLink/@StorageProp/@LocalStorageLink/@Consume装饰器只支持被私有成员变量改变,所以ArkTS会进行校验并产生告警日志。 190 191```ts 192@Entry 193@Component 194struct AccessRestrictions { 195 build() { 196 Column() { 197 ComponentChild() 198 } 199 .width('100%') 200 } 201} 202 203@Component 204struct ComponentChild { 205 @LocalStorageProp("sessionLocalProp") public local_prop_value: string = "Hello"; 206 @LocalStorageLink("sessionLocalLink") public local_link_value: string = "Hello"; 207 @StorageProp("sessionProp") public storage_prop_value: string = "Hello"; 208 @StorageLink("sessionLink") public storage_link_value: string = "Hello"; 209 @Consume public consume_value: string; 210 build() { 211 Column() { 212 Text("Hello") 213 .fontSize(50) 214 .fontWeight(FontWeight.Bold) 215 } 216 } 217} 218``` 219 2203.当成员变量被private访问限定符和@Link/@ObjectLink装饰器同时修饰时,因为@Link/@ObjectLink装饰器只支持从父组件进行初始化,所以ArkTS会进行校验并产生告警日志。 221 222```ts 223@Entry 224@Component 225struct AccessRestrictions { 226 build() { 227 Column() { 228 ComponentChild({link_value: "Hello", objectLink_value: new ComponentObj()}) 229 } 230 .width('100%') 231 } 232} 233 234@Observed 235class ComponentObj { 236 count: number = 0; 237} 238@Component 239struct ComponentChild { 240 @Link private link_value: string; 241 @ObjectLink private objectLink_value: ComponentObj; 242 build() { 243 Column() { 244 Text("Hello") 245 .fontSize(50) 246 .fontWeight(FontWeight.Bold) 247 } 248 } 249} 250``` 251 2524.当成员变量被protected访问限定符修饰时,因为自定义组件struct不支持继承,所以自定义组件的成员变量不支持被protected修饰,ArkTS会进行校验并产生告警日志。 253 254```ts 255@Entry 256@Component 257struct AccessRestrictions { 258 build() { 259 Column() { 260 ComponentChild({regular_value: "Hello"}) 261 } 262 .width('100%') 263 } 264} 265 266@Component 267struct ComponentChild { 268 protected regular_value: string = "Hello"; 269 build() { 270 Column() { 271 Text("Hello") 272 .fontSize(50) 273 .fontWeight(FontWeight.Bold) 274 } 275 } 276} 277``` 278 2795.因为private是私有的不支持外部构造赋值,@Require装饰器修饰变量又必须要求构造赋值,这两者冲突,所以当成员变量被private访问限定符、@Require和@State/@Prop/@Provide/@BuilderParam装饰器同时修饰时,ArkTS会进行校验并产生告警日志。 280 281```ts 282@Entry 283@Component 284struct AccessRestrictions { 285 build() { 286 Column() { 287 ComponentChild({prop_value: "Hello"}) 288 } 289 .width('100%') 290 } 291} 292@Component 293struct ComponentChild { 294 @Require @Prop private prop_value: string = "Hello"; 295 build() { 296 Column() { 297 Text("Hello") 298 .fontSize(50) 299 .fontWeight(FontWeight.Bold) 300 } 301 } 302} 303``` 304 305**API Level** 306 307起始支持版本为 API 12。 308 309**增加发生版本** 310 311从OpenHarmony SDK 5.0.0.12开始。 312 313**适配指导** 314 315开发者需要根据告警提示信息,对使用访问限定符的位置进行适配整改。 316 317**参考文档** 318 319[自定义组件成员属性访问限定符使用限制](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/quick-start/arkts-custom-components-access-restrictions.md) 320 321 3226.由于AnimatorResult 中的onframe,onfinish,oncancel,onrepeat方法不符合语法规范,所以新增接口 onFrame,onFinish,onCancel,onRepeat。 323 324**API Level** 325 326起始支持版本为 API 12。 327 328**增加发生版本** 329 330从OpenHarmony SDK 5.0.0.12开始。 331 332**适配指导** 333 334开发者如果继承AnimatorResult接口。则需要新增nFrame,onFinish,onCancel,onRepeat方法的实现。 335 336**参考文档** 337 338[animator动画](../../../application-dev/reference/apis-arkui/js-apis-animator.md)