news 2026/4/23 11:29:03

鸿蒙中级课程笔记2—状态管理V2—@Once、@Event

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
鸿蒙中级课程笔记2—状态管理V2—@Once、@Event

@Once:初始化同步一次

想要实现仅从外部初始化一次且不接受后续同步变化的能力,可以使用@Once装饰器搭配@Param装饰器。

阅读本文档前,请先阅读@Param。

说明

从API version 12开始,在@ComponentV2装饰的自定义组件中支持使用@Once装饰器。

从API version 12开始,该装饰器支持在元服务中使用。

概述

@Once装饰器在变量初始化时接受外部传入值进行初始化,后续数据源更改不会同步给子组件:

  • @Once必须搭配@Param使用,单独使用或搭配其他装饰器使用都是不允许的。
  • @Once不影响@Param的观测能力,仅针对数据源的变化做拦截。
  • @Once与@Param装饰变量的先后顺序不影响使用功能。
  • @Once与@Param搭配使用时,可以在本地修改@Param变量的值。

装饰器使用规则说明

@Once装饰器作为辅助装饰器,本身没有装饰类型要求和变量观察能力。

@Once变量装饰器说明
装饰器参数无。
使用条件无法单独使用,必须配合@Param装饰器使用。

@Once使用限制

  • @Once仅在@ComponentV2装饰的自定义组件中与@Param搭配使用,否则报错。

  • @Once与@Param的先后顺序无关,可以写成@Param @Once也可以写成@Once @Param。

使用场景

变量仅初始化同步一次

@Once用于期望变量仅初始化同步数据源一次,之后不再继续同步变化的场景。

本地修改@Param变量

当@Once与@Param结合使用时,可以解除@Param无法在本地修改的限制,并能够触发UI刷新。此时,使用@Param和@Once的效果类似于@Local,但@Param和@Once还能接收外部传入的初始值。

@Event装饰器

@Event主要配合@Param实现数据的双向同步。在阅读本文档前,建议提前阅读:@Param。

说明

从API version 12开始,在@ComponentV2装饰的自定义组件中支持使用@Event装饰器。

从API version 12开始,该装饰器支持在元服务中使用。

概述

由于@Param装饰的变量在本地无法更改,子组件使用@Event装饰器装饰回调方法属性并在父组件中设置该回调的实现,可以实现子组件调用回调更新父组件数据源变量,再通过@Local的同步机制,将修改同步回@Param装饰的子组件变量,以此达到主动更新@Param装饰变量的效果

@Event用于装饰组件对外输出的方法:

  • @Event装饰的回调方法中参数以及返回值由开发者决定。

  • @Event装饰非回调类型的变量不会生效。当@Event没有初始化时,会自动生成一个空的函数作为默认回调。

  • 当@Event未被外部初始化,但本地有默认值时,会使用本地默认的函数进行处理。

@Param标志着组件的输入,表明该变量受父组件影响,而@Event标志着组件的输出,可以通过该方法影响父组件。使用@Event装饰回调方法是一种规范,表明该回调作为自定义组件的输出。父组件使用子组件时,如果设置了子组件通过@Event标记的回调函数,则子组件可以调用回调函数更改@Param变量的数据源。

装饰器说明

@Event属性装饰器说明
装饰器参数无。
允许装饰的变量类型回调方法,例如()=>void、(x:number)=>boolean等。回调方法是否含有参数以及返回值由开发者决定。
允许传入的函数类型箭头函数。

限制条件

  • @Event只能用在@ComponentV2装饰的自定义组件中。当装饰非方法类型的变量时,不会有任何作用。当装饰@Component组件中的属性/方法时,编译报错。

使用场景

更改父组件中变量

使用@Event可以更改父组件中变量,当该变量作为子组件@Param变量的数据源时,该变化会同步回子组件的@Param变量。

值得注意的是,使用@Event修改父组件的值是立刻生效的,但从父组件将变化同步回子组件的过程是异步的,即在调用完@Event的方法后,子组件内的值不会立刻变化。这是因为@Event将子组件值实际的变化能力交由父组件处理,在父组件实际决定如何处理后,将最终值在渲染之前同步回子组件。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/19 12:27:13

收藏级干货:DeepSeek Engram架构解析:大模型语言理解的新思路

DeepSeek与北大联合发布Engram架构,将语言理解分为"推理"和"知识"两部分。通过2-Grams/3-Grams分词和Multi-Head Hash存储短语,结合Context-aware Gating机制解决多义词问题。Engram将传统模型中用于"组合固定短语"的大量…

作者头像 李华
网站建设 2026/4/19 0:21:26

导师推荐8个AI论文写作软件,继续教育学生轻松搞定毕业论文!

导师推荐8个AI论文写作软件,继续教育学生轻松搞定毕业论文! AI 工具让论文写作不再难 在当前的学术环境中,继续教育学生面临着越来越高的论文写作要求。无论是本科、硕士还是博士阶段,撰写一篇高质量的毕业论文不仅是对知识的总…

作者头像 李华
网站建设 2026/4/12 3:17:14

我用 Python 监听了自己的键盘,生成击键热力图,看看每天到底在“摸鱼”还是“搬砖”?

一、真实痛点引入:你的“努力”,需要可视化的证明 作为程序员,每天下班时总是感觉头昏脑涨、手指僵硬,觉得自己今天疯狂输出了几千行代码。但转头写日报的时候却陷入沉思:“我今天到底干了啥?” 向老板证明工作饱和度,靠字数是不够的。极客的最高浪漫,是用数据量化自…

作者头像 李华
网站建设 2026/4/21 16:34:21

命令行文本编辑器(Command-Line Tools)

2. 命令行文本编辑器 nano 是什么? nano 是一个命令行文本编辑器它比 vim 或 emacs 更简单,适合初学者你可以在终端里直接用它来编辑文件(比如 .zshrc)从 macOS 10.0(2001年)开始,nano 就一直是…

作者头像 李华
网站建设 2026/3/28 8:16:18

这是一次必要的警示:AI 不是智能,也不会保护你

本文不讨论商业前景、不讨论模型迭代速度, 只讨论一个问题:我们正在把什么东西,错误地当成“可以信任的智能”。 一、先说结论:Transformer 决定了 AI 永远不是“智能体” 当前所有主流大模型,核心仍是 Transformer 架…

作者头像 李华