首页 > 其他分享 >鸿蒙Next Track 使用方法总结

鸿蒙Next Track 使用方法总结

时间:2024-12-13 16:09:51浏览次数:3  
标签:string 鸿蒙 Track str1 Next 属性 class log

一、概述

@Track是class对象的属性装饰器。当class对象是状态变量时,@Track装饰的属性发生变化,只会触发该属性关联的UI更新;未被标记的属性不能在UI中使用。从API version 11开始,该装饰器支持在ArkTS卡片中使用。

二、装饰器说明

  • 装饰器参数:无。
  • 可装饰的变量:class对象的非静态成员属性。

三、观察变化和行为表现

当class对象是状态变量时,@Track装饰的属性变化,该属性关联的UI触发更新。当class对象中没有属性被标记@Track,行为与原先保持不变。@Track没有深度观测功能,使用它可避免冗余刷新。

示例

以下示例展示了@Track装饰器的使用及效果。

class LogTrack {
  @Track str1: string;
  @Track str2: string;
  constructor(str1: string ) {
    this.str1 = str1;
    this.str2 = 'World';
  }
}
class LogNotTrack {
  str1: string;
  str2: string;
  constructor(str1: string ) {
    this.str1 = str1;
    this.str2 = '世界';
  }
}
@Entry
@Component
struct AddLog {
  @State logTrack: LogTrack = new LogTrack('Hello');
  @State logNotTrack: LogNotTrack = new LogNotTrack('你好');
  isRender(index: number) {
    console.log(`Text ${index} is rendered`);
    return 50;
  }
  build() {
    Row() {
      Column() {
        Text(this.logTrack.str1) // UINode1
        .fontSize(this.isRender(1))
        .fontWeight(FontWeight.Bold)
        Text(this.logTrack.str2) // UINode2
        .fontSize(this.isRender(2))
        .fontWeight(FontWeight.Bold)
        Button('change logTrack.str1')
        .onClick(() => {
            this.logTrack.str1 = 'Bye';
          })
        Text(this.logNotTrack.str1) // UINode3
        .fontSize(this.isRender(3))
        .fontWeight(FontWeight.Bold)
        Text(this.logNotTrack.str2) // UINode4
        .fontSize(this.isRender(4))
        .fontWeight(FontWeight.Bold)
        Button('change logNotTrack.str1')
        .onClick(() => {
            this.logNotTrack.str1 = '再见';
          })
      }
    .width('100%')
    }
  .height('100%')
  }
}

在上述示例中:

  • 类LogTrack中的属性均被@Track装饰。点击按钮“change logTrack.str1”,UINode1刷新,UINode2不刷新,只有一条日志输出,避免了冗余刷新。
  • 类LogNotTrack中的属性均未被@Track装饰。点击按钮“change logNotTrack.str1”,UINode3、UINode4均会刷新,有两条日志输出,存在冗余刷新。

四、限制条件

  1. 不能在UI中使用非@Track装饰的属性,包括不能绑定在组件上、不能用于初始化子组件,错误使用将导致JSCrash;可在非UI中使用,如事件回调函数、生命周期函数中。
  2. 建议开发者不要混用包含@Track的class对象和不包含@Track的class对象,如联合类型、类继承中等。

五、使用场景

@Track和自定义组件更新

以下示例展示组件更新和@Track的处理步骤。

class Log {
  @Track logInfo: string;
  owner: string;
  id: number;
  time: Date;
  location: string;
  reason: string;
  constructor(logInfo: string ) {
    this.logInfo = logInfo;
    this.owner = 'OH';
    this.id = 0;
    this.time = new Date();
    this.location = 'CN';
    this.reason = 'NULL';
  }
}
@Entry
@Component
struct AddLog {
  @State log: Log = new Log('origin info.');
  build() {
    Row() {
      Column() {
        Text(this.log.logInfo)
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
        .onClick(() => {
            // 非@Track属性可在事件处理函数中使用
            console.log('owner: ' + this.log.owner +
              ' id: ' + this.log.id +
              ' time: ' + this.log.time +
              ' location: ' + this.log.location +
              ' reason: ' + this.log.reason);
            this.log.time = new Date();
            this.log.id++;
            this.log.logInfo += ' info.';
          })
      }
    .width('100%')
    }
  .height('100%')
  }
}

处理步骤:

  1. AddLog自定义组件的Text.onClick点击事件自增字符串' info.'。
  2. 由于@State log变量的@Track属性logInfo更改,Text重新渲染。

标签:string,鸿蒙,Track,str1,Next,属性,class,log
From: https://www.cnblogs.com/freerain/p/18605168

相关文章

  • 【鸿蒙ArkTS】全局添加加载loading提示
    鸿蒙ArkTS中实现全局加载提示功能,可以通过以下方式:创建一个全局状态管理器:管理加载状态。设计一个加载组件:用来显示或隐藏加载提示。在需要显示加载提示的场景中切换加载状态。以下是实现全局加载提示的完整代码示例:示例代码1.创建全局状态管理器我们可以使用一个......
  • 鸿蒙Next内置组件双向同步$$使用方法总结
    一、$$语法概述在鸿蒙Next开发中,$$语法为系统内置组件提供了一种强大的双向同步机制,用于实现TypeScript(TS)变量与系统内置组件内部状态之间的同步。这一特性使得开发者能够更加便捷地管理组件状态,确保用户界面(UI)与应用数据的一致性,提升用户体验。二、使用规则(一)变量类型支持基......
  • 鸿蒙Next状态变量Watch使用方法总结
    一、@Watch装饰器概述@Watch装饰器用于监听状态变量的变化,当被装饰的状态变量发生改变时,会触发对应的回调函数执行。其在ArkUI框架内部基于严格相等(===)来判断数值是否更新,仅当严格相等判断为false时,才会触发回调。这为开发者提供了一种有效的方式来响应状态变量的变化,从而实现应......
  • 鸿蒙应用开发:开机自启并自检网络状态
    公司要开发一个小玩意,主要用途就是监测远端软件包与本地安装包是否一致,如果不是则下载更新本地应用,并且要求开机会自检。现在来跟各位看官老爷们分享一下其中的一些关键,希望各位不吝指教!开机自启关于如何设置开机自启这篇文章已经讲的很详细了,请移步:OpenHarmony应用开机自启......
  • 鸿蒙UI布局-相对布局
    @Entry@ComponentstructIndex{@Statemessage:string='HelloWorld';build(){RelativeContainer(){Row().width(100).height(100).backgroundColor(Color.Black).alignRules({top:{anchor:'__container__',align......
  • 鸿蒙NEXT开发案例:保质期计算
     【引言】保质期计算应用是一个基于鸿蒙NEXT框架开发的数字和文本统计组件。用户可以输入商品的生产日期和保质期天数,应用会自动计算并展示相关信息,包括保质状态、剩余天数、生产日期和到期日期。【环境准备】•操作系统:Windows10•开发工具:DevEcoStudioNEXTBeta1Bu......
  • 鸿蒙开发(1)
    一、下载开发工具1、下载中心2、安装DevEcoStudioDevEcoStudio支持Windows和macOS系统,下面将针对两种操作系统的软件安装方式分别进行介绍。Windows环境运行环境要求为保证DevEcoStudio正常运行,建议电脑配置满足如下要求:操作系统:Windows1064位、Windows1164位内......
  • 鸿蒙Next环境设备查询Environment用法总结
    一、概述Environment是ArkUI框架在应用程序启动时创建的单例对象,用于提供一系列描述应用程序运行状态的属性,其所有属性不可变(应用不可写入)且为简单类型,主要为AppStorage提供设备环境相关信息,以辅助应用根据设备环境做出不同的处理逻辑。二、Environment内置参数accessibilityE......
  • 【鸿蒙 ArkTS 开发】网络请求HTTP并渲染列表展示
    1.页面布局和网络请求(展示产品信息)在这个页面中,我们会从网络获取产品数据,并使用List组件展示产品信息。product_list_page.etsimportui;import@ohos.net.http;importohos.agp.components.List;importohos.agp.components.Text;importohos.agp.components.Image;......
  • 鸿蒙NEXT开发案例:九宫格随机
     【引言】在鸿蒙NEXT开发中,九宫格抽奖是一个常见且有趣的应用场景。通过九宫格抽奖,用户可以随机获得不同奖品,增加互动性和趣味性。本文将介绍如何使用鸿蒙开发框架实现九宫格抽奖功能,并通过代码解析展示实现细节。【环境准备】•操作系统:Windows10•开发工具:DevEcoStud......