HarmonyOS 父子组件数据通信(Prop与Link)

我们可以先写一个这样的小案例

typescript 复制代码
@Entry
@Component
struct Index {

  @State name:string = "小猫猫";

  build() {
    Row() {
      Column() {
        Text(this.name)
        Button("改个name").onClick(() => {
          this.name = this.name == "小猫猫"?"小狗狗":"小猫猫";
        })
        son()
        son({const: this.name })
      }
      .width('100%')
    }
    .height('100%')
  }
}

@Component
struct son {
  const:string = "你好"
  build() {
    Row() {
      Column() {
        Text(this.const)
      }
    }
  }
}

这里 我们定义了一个子组件 son 里面写了一个变量 const 字符串类型 默认值为"你好"

然后 用Text文本组件展示内容

然后 我们父组件调用子组件 一个传入了const 一个没传

运行结果如下

然后 我们点击父组件的button name是会发生改变的 从小猫猫变成小狗狗

我们点击按钮

但是 我们明显发现 我们传给子组件的 const 没有因为父组件的name改变而改变

我们可以给他加一个注解

将代码改成这样

typescript 复制代码
@Entry
@Component
struct Index {

  @State name:string = "小猫猫";

  build() {
    Row() {
      Column() {
        Text(this.name)
        Button("改个name").onClick(() => {
          this.name = this.name == "小猫猫"?"小狗狗":"小猫猫";
        })
        son({const: this.name })
      }
      .width('100%')
    }
    .height('100%')
  }
}

@Component
struct son {
  @Prop const:string
  build() {
    Row() {
      Column() {
        Text(this.const)
      }
    }
  }
}

这里 我们给子组件的 const 修饰上 Prop

首先需要强调 Prop 修饰的变量不能有默认值 你写了默认值会报错 必须从父组件传进来

此时 我们点击button按钮 Prop 修饰的变量会根据父组件的传递内容变化而变化

但这种传递是单向的 我们修改子组件的 const 父组件不会受影响 而且不要在子组件中乱动父组件传的值 你在子组件改父组件传的东西 是有问题的

然后 我们还有一种数据修饰 link

我们将代码改成这样

typescript 复制代码
@Entry
@Component
struct Index {

  @State name:string = "小猫猫";

  build() {
    Row() {
      Column() {
        Text(this.name)
        Button("改个name").onClick(() => {
          this.name = this.name == "小猫猫"?"小狗狗":"小猫猫";
        })
        son({const: $name })
      }
      .width('100%')
    }
    .height('100%')
  }
}

@Component
struct son {
  @Link const:string
  build() {
    Row() {
      Column() {
        Text(this.const)
        Button("改个name").onClick(() => {
          this.const = "小海豚";
        })
      }
    }
  }
}

这里 我们子组件的const变量注释换成 Link 它和Prop一样 放上去 变量就不能有默认值

然后 我们父组件传值是 如果 你是 this.变量名是会报错的

Link修饰的变量 只需要 $后面放一个组件变量就够了

然后 点击子组件button 就会修改link修饰的数据

也可以简单理解为

Prop 子集不能修改数据 父级改了 子集会响应

Link 子集和父级都可以修改数据 且双方都会响应

相关推荐
遇到困难睡大觉哈哈6 小时前
HarmonyOS —— Remote Communication Kit 拦截器(Interceptor)高阶定制能力笔记
笔记·华为·harmonyos
遇到困难睡大觉哈哈7 小时前
HarmonyOS —— Remote Communication Kit 定制处理行为(ProcessingConfiguration)速记笔记
笔记·华为·harmonyos
氤氲息7 小时前
鸿蒙 ArkTs 的WebView如何与JS交互
javascript·交互·harmonyos
遇到困难睡大觉哈哈7 小时前
HarmonyOS支付接入证书准备与生成指南
华为·harmonyos
赵浩生8 小时前
鸿蒙技术干货10:鸿蒙图形渲染基础,Canvas绘图与自定义组件实战
harmonyos
赵浩生8 小时前
鸿蒙技术干货9:deviceInfo 设备信息获取与位置提醒 APP 整合
harmonyos
BlackWolfSky8 小时前
鸿蒙暂未归类知识记录
华为·harmonyos
waeng_luo9 小时前
[鸿蒙2025领航者闯关] ArkUI动画实战
鸿蒙·鸿蒙2025领航者闯关·鸿蒙6实战·开发者年度总结
L、21810 小时前
Flutter 与开源鸿蒙(OpenHarmony):跨平台开发的新未来
flutter·华为·开源·harmonyos