首页 > 其他分享 >HarmonyOS Next V2 @Event

HarmonyOS Next V2 @Event

时间:2024-12-15 19:45:40浏览次数:8  
标签:修改 Param HarmonyOS V2 num func 组件 Event

HarmonyOS Next V2 @Event

背景

在上一节中,我们针对父子组件,讲了关于传递数据的知识。我们了解到

  1. @Local 是管理自己内部的数据的,
  2. @Param 是负责接收父组件的数据的,而且子自己内部不能直接修改

按照一个组件最基本的功能,既能接收外部传入的数据也要向外部传递数据。那么 @Event 修饰符就是来解决这个问题的了。

介绍

@Event 是 子组件向父组件传递数据的技术,它只能用在 @ComponentV2 修改的组件上,其中的思想是

  1. 完成修改数据的操作,还是放在父组件内部,通过定义一个函数 func 来实现
  2. 在父组件调用子组件的时候,也顺带把这个函数 func 传递给子组件
  3. 子组件在内部 使用 @Event 来修饰 该函数,并且在需要的使用直接调用即可

父组件

  1. 定义内部数据 num
  2. 定义修改内部数据num的函数 func
  3. 使用子组件时,把numfunc都传递过去
@Entry
@ComponentV2
struct Index {
  @Local num: number = 100
  // 自己定义的函数 负责修改数据, 该函数也要传递给子组件
  func = (unit: number) => {
    this.num -= unit
  }

  build() {
    Column() {
      Button("父组件 修改" + this.num)
        .onClick(() => {
          this.num++
        })
      // 使用子组件,并且传递数据 和 传递函数
      Son({ num: this.num, func: this.func })
        .padding(10)
    }
    .width("100%")

  }
}

子组件

  1. 使用 @Param 接收父组件传递的 num
  2. 使用@Event 接收父组件传递的函数 func
  3. 定义点击事件的处理函数 onfunc,内部直接调用父组件传递过来的函数
@ComponentV2
struct Son {
  @Param num: number = 0
  @Event func: (num: number) => void = () => {
  }
  onfunc = () => {
    this.func(5)
  }

  build() {

    Column() {
      Button(`子组件 ${this.num}`)

      Button("子组件修改父组件中的状态")
        .onClick(this.onfunc)
    }
    .border({
      width: 1,
      style: BorderStyle.Dashed
    })
  }
}

流程

image-20240723105343511

@Once

@Once@Param作用类似,都可以表示接收父组件传递过来的数据,但是也存在区别

  1. @Once 只会接收第一次父组件传递过来的数据,后续父组件的数据修改,不会同步到 @Once修改的变量上
  2. @Once 需要和 @Param 一起搭配使用,因为 @Param 修饰的是父组件传递给子组件的变量,该变量不能直接被修改。所以@Once修饰的变量,也不能在子组件内部直接修改。
@ComponentV2
struct Son {
  @Once @Param num: number = 0

  build() {
    Column() {
      Button(`子组件 ${this.num}`)
        .onClick(() => {
          this.num++ // 修改无效
        })
    }
    .border({
      width: 1,
      style: BorderStyle.Dashed
    })
  }
}

@Entry
@ComponentV2
struct Index {
  @Local num: number = 100

  build() {
    Column() {

      Son({ num: this.num })
        .padding(10)
    }
    .width("100%")

  }
}

image-20240723110522686

总结

  1. @Param 表示父组件传递给子组件的数据,当父组件修改了,子组件会跟随响应,同时子组件内部不能直接修改 @Param修饰的变量
  2. @Event 表示子组件想要修改父组件数据的一种技术,它用来修改函数,该函数是由父组件定义和传递给子组件的
  3. @Once 必须和 @Param 搭配使用,表示父组件传递过来的数据,只会第一次生效。

标签:修改,Param,HarmonyOS,V2,num,func,组件,Event
From: https://www.cnblogs.com/aspXiaoBai/p/18608394

相关文章

  • HarmonyOS Next V2 @Local 和@Param
    HarmonyOSNextV2@Local和@Param@Local背景@Local是harmony应用开发中的v2版本中对标@State的状态管理修饰器,它解决了@State对状态变量更改的检测混乱的问题:@State修饰的状态变量可以是组件内部自己定义的@State修饰的状态也可以由外部父组件传递这样就导致......
  • HarmonyOS Next V2 状态管理实战
    HarmonyOSNextV2状态管理实战介绍以下案例适合刚开始手鸿蒙开发的小伙伴,有大量的最新逻辑锻炼、鸿蒙核心语法、使用最新鸿蒙的@Local、@Computed等装饰器来完成。另外,考虑在学习知识的知识时候,优先关注核心功能,所以提供的布局都会适当简化,但是能保证把核心功能展示出来。......
  • HarmonyOS Next V2 状态管理@ObservedV2 基本使用
    HarmonyOSNextV2状态管理@ObservedV2基本使用背景最近Harmony应用开发技术中推出了新版的状态管理技术,试用过后,直呼很香。我们来看为什么?因为在Harmony应用开发过程中,我们一定会碰到监听嵌套类/深层次属性的需求,如希望son的weight属性变化后,可以引起UI刷新。@Obser......
  • HarmonyOS Next V2 状态管理 AppStorageV2 和 PersistenceV2
    HarmonyOSNextV2状态管理AppStorageV2和PersistenceV2前言在HarmonyOS应用开发过程中,我们已经学习过了不少关于状态管理相关的技术,如@ObservedV2装饰器和@Trace装饰器:类属性变化观测@ComponentV2装饰器:自定义组件@Local装饰器:组件内部状态@Param:组件外部输入@Once:初......
  • HarmonyOS Next 关于页面渲染的性能优化方案
    HarmonyOSNext关于页面渲染的性能优化方案HarmonyOSNext应用开发中,用户的使用体验至关重要。其中用户启动APP到呈现页面主要包含三个步骤:框架初始化页面加载布局渲染从页面加载到布局渲染中,主要包含了6个环节:执行页面文件生成页面节点树页面节点树挂载布局渲......
  • HarmonyOS Next 浅谈 发布-订阅模式
    HarmonyOSNext浅谈发布-订阅模式前言其实在目前的鸿蒙应用开发中,或者大前端时代、vue、react、小程序等等框架、语言开发中,普通的使用者越来越少的会碰到必须要掌握设计模式的场景。大白话意思就是一些框架封装太好了,使用者只管在它们的体系下使用就行,哪怕不懂设计模式,也不妨......
  • HarmonyOS Next 元服务新建到上架全流程
    HarmonyOSNext元服务新建到上架全流程接上篇这篇文章的主要目的是介绍元服务从新建到上家的完整流程在AGC平台上新建一个项目链接一个项目可以多个应用AGC新建一个元服务应用新建一个本地元服务项目如果成功在AGC平台上新建过元服务,那么这里会自动显示修改元服务......
  • HarmonyOS Next 简单上手元服务开发
    HarmonyOSNext简单上手元服务开发万物互联时代,人均持有设备量不断攀升,设备种类和使用场景更加多样,使得应用开发、应用入口变得更加复杂。在此背景下,应用提供方和用户迫切需要一种新的服务提供方式,使应用开发更简单、服务(如听音乐、打车等)的获取和使用更便捷。为此,HarmonyOS除......
  • HarmonyOS Next 如何优雅的编写注释
    HarmonyOSNext如何优雅的编写注释程序员箴言我最讨厌世界上的两种人:第一种是不写注释的人第二种是让我写注释的人前言随着HarmonyOSNEXT的发展加快,不少的公司已经陆续加大了资源来开发软件项目。那么伴随项目的发展,项目团队也需要按照一定的规范来编写项目注释或者......
  • HarmonyOS Next 开发的艺术 面向对象
    HarmonyOSNext开发的艺术面向对象聊聊应用的开发范式Harmony应用的主要开发范式,是采用了类似面向对象的范式。struct在java语言中表示结构体。前端工程师可以将其看成是class即可其实这个开发风格会给大部分的前端工程师不太适应的感觉。因为目前主流的前端开发框架......