鸿蒙开发:了解$$运算符
前言
本文基于Api13
有这样一个需求,一个Text组件,一个TextInput组件,要求Text组件同步展示TextInput组件里的内容,也就是TextInput组件输入什么内容,就要在Text组件里展示什么内容,这个需求如何实现呢?
聪明的同学肯定能够想到,这不就是双向绑定吗,这还不简单,@State装饰器就可以搞定啊,确实,@State装饰器可以实现,当TextInput的内容发生变化时,我们给@State装饰器修饰的变量进行赋值,Text组件加载这个变量即可。
简单代码如下:
@Entry
@Component
struct Index {
  @State message: string = ""
  build() {
    Column() {
      Text(this.message)
        .fontSize(18)
      TextInput()
        .onChange((value: string) => {
          this.message = value
        })
    }.height("100%")
    .width("100%")
    .justifyContent(FlexAlign.Center)
  }
}
运行之后效果:

那么除了以上的方式,还有没有一个更简单的方式呢?哎,必须有,这就是 $$ 运算符, 使用它,可以让双向绑定实现起来更加的简单,我们把代码修改一下:
 Text(this.message)
        .fontSize(18)
TextInput({ text: $$this.message })
以上的代码,运行之后,和上面的效果是一模一样的,可以看到,使用了$$运算符后,我们不用再单独的去监听输入框的内容变化,它自身就实现了TS变量和系统组件的内部状态保持同步。
什么是$$运算符
一句话解读:$$运算符是系统组件提供ts变量的引用,使用它可以使得ts变量和组件的内部状态保持同步,有一点需要知道,那就是当前仅基础类型变量,至于装饰器的话,也仅仅支持三个,分别是@State、@Link和@Prop装饰器。
支持双向绑定的组件就比较多了,凡是有内部状态属性的组件基本上都支持,像输入组件,单选组件,多选组件等等都是支持的,目前支持的组件列表如下:
| 组件 | 支持的参数/属性 | 
|---|---|
| Checkbox | select | 
| CheckboxGroup | selectAll | 
| DatePicker | selected | 
| TimePicker | selected | 
| MenuItem | selected | 
| Panel | mode | 
| Radio | checked | 
| Rating | rating | 
| Search | value | 
| SideBarContainer | showSideBar | 
| Slider | value | 
| Stepper | index | 
| Swiper | index | 
| Tabs | index | 
| TextArea | text | 
| TextInput | text | 
| TextPicker | selected、value | 
| Toggle | isOn | 
| AlphabetIndexer | selected | 
| Select | selected、value | 
| BindSheet | isShow | 
| BindContentCover | isShow | 
| Refresh | refreshing | 
| GridItem | selected | 
| ListItem | selected | 
使用方式,基本上是一致的,比如Checkbox组件,我们实现select属性,进行绑定即可。
Text(this.select.toString())
    Checkbox()
      .select($$this.select)
相关总结
绑定的变量变化时,会触发UI的同步刷新,当然了在你使用到该变量的时候。
本文标签:HarmonyOS/ArkUI
#鸿蒙开发#简单的也好,复杂的也罢,关于HarmonyOS,总要深入浅出,总要步步为赢。
 投递高德地图等公司10个岗位
投递高德地图等公司10个岗位
