作者:HarderCoder
ArkTS围绕应用开发在 TypeScript (简称TS)生态基础上做了进一步扩展,继承了TS的所有特性,是TS的超集
ArkTS在TS的基础上扩展了struct和很多的装饰器以达到描述UI和状态管理的目的
自定义组件必须使用struct定义,并且被Component装饰器修饰
@Component 表示这是一个自定义组件
@Entry 表示该自定义组件为入口组件
@State 表示组件中的状态变量,状态变量变化会触发UI刷新
UI描述 :以声明式的方式来描述UI的结构
自定义组件:可复用的UI单元,可组合其他组件
特殊的封装UI描述的方法,细粒度的封装和复用UI描述
比如我们写卡片时都有固定的模板,圆角为8背景色为白色,我们就可以像下面这样封装
@Component
struct MyCard {
@BuilderParam child: () => void
build() {
Row() {
this.child()
}
.width("100%")
.borderRadius(8)
.backgroundColor(Color.White)
}
}
然后使用的时候配合上尾随闭包看起来会更自然
@Component
struct CustomContainerUser {
@State text: string = 'header';
build() {
Column() {
// 创建MyCard,在创建MyCard时,通过其后紧跟一个大括号“{}”形成尾随闭包
// 作为传递给子组件MyCard @BuilderParam child: () => void的参数
MyCard() {
Text("我是一个卡片")
}
}
}
}
扩展内置组件和封装属性样式,更灵活地组合内置组件
// 定义在全局的@Styles封装的样式
@Styles function globalFancy () {
.width(150)
.height(100)
.backgroundColor(Color.Pink)
}
@Entry
@Component
struct FancyUse {
@State heightValue: number = 100
// 定义在组件内的@Styles封装的样式
@Styles fancy() {
.width(200)
.height(this.heightValue)
.backgroundColor(Color.Yellow)
.onClick(() => {
this.heightValue = 200
})
}
build() {
Column({ space: 10 }) {
// 使用全局的@Styles封装的样式
Text('FancyA')
.globalFancy ()
.fontSize(30)
// 使用组件内的@Styles封装的样式
Text('FancyB')
.fancy()
.fontSize(30)
}
}
}
@Extend,用于扩展原生组件样式,仅能定义在全局,它支持参数
我们开发过程中经常需要定义字体宏进行使用,在ArkTS中我们可以为Text扩展样式来实现
@Extend(Text)
function PFFont(font: string = "PingFang") {
.fontFamily(font)
}
// PF_S可以调用预定义的PFFont
@Extend(Text)
function PF_S(size: number = 14) {
.PFFont("PingFang-Sem")
.fontSize(size)
}
@Extend(Text)
function PF_R(size: number = 14) {
.PFFont("PingFang-Regular")
.fontSize(size)
}
多态样式,可以依据组件的内部状态的不同,设置不同样式,目前支持的状态有
@ObjectLink和@Observed类装饰器用于在涉及嵌套对象或数组的场景中进行双向数据同步
- 在初次渲染时,上层组件的状态变量通过$state传递给下层组件,下层组件拿到状态变量后,将Link包装类的this指针注册给上层组件的状态变量
- 上层组件的状态变量发生变化后,会遍历依赖这个状态变量的所有组件以及我们在第一步注册的Link包装类进行更新。Link包装类更新又会导致依赖它的组件更新
- 下层组件的Link包装类变化时,调用上层组件传下来的状态变量的set方法更新状态变量的数值。然后上层组件和下层组件分别遍历各自的依赖状态变量的组件进行更新
@Link装饰的变量和其所属的自定义组件共享生命周期。
4. @Consume的初始化规则如下
仅 @Observed/@ObjectLink 可以观察嵌套场景,其他的状态变量仅能观察第一层
LocalStorage是ArkTS为构建页面级别状态变量提供存储的内存内“数据库”
@StorageProp 的框架行为
@StorageLink 的框架行为
$$
语法:内置组件双向同步$$
支持基础类型变量,以及@State、@Link和@Prop装饰的变量。$$
仅支持 Refresh 组件的refreshing参数。$$
绑定的变量变化时,会触发UI的同步刷新$$
还可以用作 @Builder的状态更新大家直接跳到链接去看吧。里面内容很简单也很容易理解
为了能让大家更好的学习鸿蒙 (Harmony OS) 开发技术,这边特意整理了《鸿蒙 (Harmony OS)开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05
入门必看:https://qr21.cn/FV7h05
HarmonyOS 概念:https://qr21.cn/FV7h05
如何快速入门:https://qr21.cn/FV7h05
开发基础知识:https://qr21.cn/FV7h05
基于ArkTS 开发:https://qr21.cn/FV7h05