首页 > 其他分享 >鸿蒙Next状态管理V2 - @Once初始化用法总结

鸿蒙Next状态管理V2 - @Once初始化用法总结

时间:2024-12-27 09:19:56浏览次数:6  
标签:string struct V2 Param Next ComponentV2 onceParam Once

一、概述

@Once装饰器用于实现变量仅在初始化时同步一次外部传入值,后续数据源更改时不会将修改同步给子组件。其必须搭配@Param使用,且不影响@Param的观测能力,仅拦截数据源变化,与@Param装饰变量的先后顺序不影响实际功能,并且在搭配使用时可在本地修改@Param变量的值。

二、装饰器使用规则说明

(一)@Once变量装饰器

  • 装饰器参数:无。
  • 使用条件:无法单独使用,必须配合@Param装饰器使用。

(二)限制条件

  • @Once只能用在@ComponentV2装饰的自定义组件中且仅能与@Param搭配使用。例如:
@ComponentV2
struct CompA {
  @Param @Once onceParam: string = "onceParam"; // 正确用法
  @Once onceStr: string = "Once"; // 错误用法,@Once无法单独使用
  @Local @Once onceLocal: string = "onceLocal"; // 错误用法,@Once不能与@Local一起使用
}
@Component
struct Index {
  @Once @Param onceParam: string = "onceParam"; // 错误用法
}
  • @Once与@Param的先后顺序无关,如@ComponentV2结构中写成@Param @Once或@Once @Param均可。
@ComponentV2
struct CompA {
  @Param @Once param1: number;
  @Once @Param param2: number;
}

三、使用场景

(一)变量仅初始化同步一次

适用于期望变量仅在初始化时同步数据源一次,之后不再继续同步变化的场景。例如:

@ComponentV2
struct CompA {
  @Param @Once onceParam: string = '';
  build() {
      Column() {
        Text(`onceParam: ${this.onceParam}`)
      }
  }
}

@Entry
@ComponentV2
struct CompB {
  @Local message: string = "Hello World";
  build() {
      Column() {
      Text(`Parent message: ${this.message}`)
      Button("change message")
       .onClick(() => {
          this.message = "Hello Tomorrow";
        })
      CompA({ onceParam: this.message })
      }
  }
}

(二)本地修改@Param变量

当@Once搭配@Param使用时,可解除@Param无法在本地修改的限制,且修改能触发UI刷新,此时相当于@Local,但@Param @Once能接受外部传入初始化。例如:

@ObservedV2
class Info {
  @Trace name: string;
  constructor(name: string ) {
    this.name = name;
  }
}

@ComponentV2
struct Child {
  @Param @Once onceParamNum: number = 0;
  @Param @Once @Require onceParamInfo: Info;
  build() {
    Column() {
      Text(`Child onceParamNum: ${this.onceParamNum}`)
      Text(`Child onceParamInfo: ${this.onceParamInfo.name}`)
      Button("changeOnceParamNum")
       .onClick(() => {
          this.onceParamNum++;
        })
      Button("changeParamInfo")
       .onClick(() => {
          this.onceParamInfo = new Info("Cindy");
        })
    }
  }
}

@Entry
@ComponentV2
struct Index {
  @Local localNum: number = 10;
  @Local localInfo: Info = new Info("Tom");
  build() {
    Column() {
      Text(`Parent localNum: ${this.localNum}`)
      Text(`Parent localInfo: ${this.localInfo.name}`)
      Button("changeLocalNum")
       .onClick(() => {
          this.localNum++;
        })
      Button("changeLocalInfo")
       .onClick(() => {
          this.localInfo = new Info("Cindy");
        })
      Child({
        onceParamNum: this.localNum,
        onceParamInfo: this.localInfo
      })
    }
  }
}

标签:string,struct,V2,Param,Next,ComponentV2,onceParam,Once
From: https://www.cnblogs.com/freerain/p/18634605

相关文章

  • 2024最新工具分享 | 24年最新AWVS/Acunetix Premium V24.8高级版漏洞扫描器(最新版)Wi
    前言AcunetixPremium是一种Web应用程序安全解决方案,用于管理多个网站、Web应用程序和API的安全。集成功能允许您自动化DevOps和问题管理基础架构。AcunetixPremium:全面的Web应用程序安全解决方案Web应用程序对于企业和组织与客户、合作伙伴和员工的联系至关......
  • Next.js 14 部署运维:从开发到生产的最佳实践
    在完成Next.js14应用的开发后,如何将其高效地部署到生产环境并进行可靠的运维管理是一个关键问题。本文将详细介绍Next.js14的部署策略和运维最佳实践。部署准备工作1.环境配置管理//next.config.js/**@type{import('next').NextConfig}*/constnextConfig=......
  • Next.js 14 性能优化:从首屏加载到运行时优化的最佳实践
    在现代Web应用中,性能优化直接影响用户体验和业务转化。Next.js14提供了多种内置的性能优化特性,今天我们就来深入探讨如何充分利用这些特性,以及一些实用的优化技巧。图片和字体优化1.图片优化Next.js的Image组件供了强大的图片优化功能://components/OptimizedIm......
  • Next.js 14 基础入门:从项目搭建到核心概念
    Next.js14带来了许多激动人心的新特性,包括局部渲染、ServerActions增强等。作为一名前端开发者,我最近在项目中升级到了Next.js14,今天就来分享一下从项目搭建到实际应用的完整过程。项目初始化首先,让我们创建一个全新的Next.js14项目:#使用create-next-app创建......
  • QOwnNotes(开源Markdown笔记本) v24.12.6
    QOwnNotes是开源的记事本,具有Markdown支持和针对GNU/Linux,MacOSX和Windows的待办事项列表管理器,可与NextcloudNotes和ownCloudNotes一起使用。您可以使用QOwnNotes写下您的想法,并稍后在移动设备上进行编辑或搜索,例如使用Android的NextcloudNotes或Nextcloud/o......
  • 报表工具DevExpress Reporting v24.2亮点 - AI功能进一步强化
    DevExpressReporting是.NETFramework下功能完善的报表平台,它附带了易于使用的VisualStudio报表设计器和丰富的报表控件集,包括数据透视表、图表,因此您可以构建无与伦比、信息清晰的报表。报表工具DevExpressReportingv24.2将于近期发布,本文将详细介绍DevExpressReportingv2......
  • Deepseek V3开源!多语言编程能力飙升,力压Claude 3.5 Sonnet V2
    备受期待的DeepseekV3终于开源!这款全新的AI模型在多语言编程能力上取得了重大突破,其在aider多语言编程测评中的表现,甚至超越了Claude3.5SonnetV2等竞争对手,引发了业界广泛关注。据了解,DeepseekV3相比之前的版本,在性能上实现了质的飞跃。DeepseekV2.5在aider测评中的成......
  • Next.js 14 基础入门:从项目搭建到核心概念
    Next.js14带来了许多激动人心的新特性,包括局部渲染、ServerActions增强等。作为一名前端开发者,我最近在项目中升级到了Next.js14,今天就来分享一下从项目搭建到实际应用的完整过程。项目初始化首先,让我们创建一个全新的Next.js14项目:#使用create-next-app创建项目n......
  • 华为鸿蒙HarmonyOS Next基础开发教程
    华为鸿蒙HarmonyOSNext基础开发教程1.开发环境准备安装DevEcoStudioDevEcoStudio是华为为HarmonyOS应用开发提供的集成开发环境(IDE)。您可以从华为的官方网站下载并安装DevEcoStudio。配置开发环境确保您的计算机上安装了以下软件:JDK:Java开发工具包,用于支持Java语言开......
  • ssm考研助手v26k3(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、项目背景与意义随着社会竞争的加剧,越来越多的学生选择考研以提升学术层次和就业竞争力。然而,考研过程中,信息收集、资料整理、复习计划制定等问......