当前位置:首页 > 技术知识 > 正文内容

鸿蒙开发:了解$$运算符(鸿蒙 代码)

maynowei7个月前 (08-16)技术知识133

前言


本文基于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

相关文章

btrace 3.0 重磅新增 iOS 支持!免插桩原理大揭秘!

重磅更新btrace 是由字节跳动抖音基础技术团队自主研发的面向移动端的性能数据采集工具,它能够高效的助力移动端应用采集性能 Trace 数据,深入剖析代码的运行状况,进而辅助优化提升移动端应用的性能...

C++11 同步机制:互斥锁和条件变量

前段时间,我研究了 ROS2(Jazzy)机器人开发系统,并将官网中比较重要的教程和概念,按照自己的学习顺序翻译成了中文,进行了整理和记录。到目前为止,已经整理了20多篇文章。如果你想回顾之前的内容,...

什么?Java 中的锁还有状态?(java中的锁都有哪些类型)

线程如果锁住了某个资源,致使其他线程无法访问的这种锁被称为悲观锁,相反,线程不锁住资源的锁被称为乐观锁,而自旋锁是基于 CAS 机制实现的,CAS又是乐观锁的一种实现,那么对于锁来说,多个线程同步访问...

Google前工程主管“入住”Oracle(google公司前台)

ZDNet至顶网服务器频道 10月11日 新闻消息:Oracle 已聘用了前 Snapchat 和 Google 工程部主管 Peter Magnusson,其主要的职责是运行一个被重新调整过的 of...

分享收藏的 oracle 11.2.0.4各平台的下载地址

概述oracle 11.2.0.4是目前生产环境用的比较多的版本,同时也是很稳定的一个版本。目前官网上已经找不到下载链接了,有粉丝在头条里要求分享一下下载地址。一、各平台下载地址1.1 Linux x...

Oracle数据库安装 | 步骤详细(oracle数据库怎么安装及配置)

部署环境系统:CentOS 7.1 (Redhat版本也可以)数据库:Oracle 11gR2 1.修改hosts文件1.1 查询主机名和IP地址1.2 修改/etc/hosts文件如下2.挂载操作系...