arkts-restrictions-and-extensions.md 1.8 KB
Newer Older
T
tianyu 已提交
1 2 3 4
# 使用限制与扩展

## 在生成器函数中的使用限制

L
luoying_ace_admin 已提交
5
ArkTS语言的使用在生成器函数中存在一定的限制:
T
tianyu 已提交
6 7 8 9 10 11 12 13 14

- 表达式仅允许在字符串(${expression})、if条件、ForEach的参数和组件的参数中使用;
- 任何表达式都不能导致任何应用程序状态变量(@State、@Link、@Prop)的改变,否则会导致未定义和潜在不稳定的框架行为;
- 生成器函数内部不能有局部变量。

上述限制都不适用于事件处理函数(例如onClick)的匿函数实现。

## 变量的双向绑定

L
luoying_ace_admin 已提交
15
ArkTS支持通过$$双向绑定变量,通常应用于状态值频繁改变的变量。
T
tianyu 已提交
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72

- 当前$$支持基础类型变量,以及@State、@Link和@Prop装饰的变量。
- 当前$$仅支持[bindPopup](../reference/arkui-ts/ts-universal-attributes-popup.md)属性的show参数和@State变量之间的渲染,Radio组件的checked属性。
- $$绑定的变量变更时,仅渲染当前组件,提高渲染速度。

```ts
// xxx.ets
@Entry
@Component
struct bindPopup {
	@State customPopup: boolean = false
	build() {
		column() {
			button() {
				Text('Popup')
			}
			.onClick(() => {
				this.customPopup = !this.customPopup
			})
			.bindPopup(
				$$this.customPopup, {
				mesage: "showPopup"
				}
			)
		}
	}
}

```

## 状态变量多种数据类型声明使用限制

@State、@Provide、 @Link和@Consume四种状态变量的多种数据类型只能同时由简单数据类型或引用数据类型其中一种构成。

示例:

```ts
// xxx.ets
@Entry
@Component
struct Index {
  //错误写法: @State message: string | Resource = 'Hello World'
  @State message: string = 'Hello World'

  build() {
    Row() {
      Column() {
        Text(`${ this.message }`)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
      }
      .width('100%')
    }
    .height('100%')
  }
}
```