关于HarmonyOS 鸿蒙Next中$$在@Builder装饰器作用的疑问

发布于 1周前 作者 sinazl 来自 鸿蒙OS

关于HarmonyOS 鸿蒙Next中$$在@Builder装饰器作用的疑问 在文档"@Builder装饰器:自定义构建函数"里看到关于$$用法的介绍:

@Builder方法内调用自定义组件或者其他@Builder方法,ArkUI提供$$作为按引用传递参数的范式。

我自己试了下,多层@Builder方法嵌套使用中不使用$$传递参数,对应的组件也会同步更新,那这个$$到底有什么含义?

@Entry
@ComponentV2
struct Index {
  @Local message: string = 'Hello World';
  number: number = 0;

  build() {
    Column() {
      Button('点击改变文本')
        .margin({bottom: 50})
        .onClick(() => {
          this.message = `Hello, ${this.number++}`;
        })

      red({message: this.message})
    }
  }
}

class Tmp {
  message: string = ''
}

[@Builder](/user/Builder)
function red(message: Tmp) {
  Button(message.message)
    .margin({bottom: 50})
    .backgroundColor(Color.Red)

  green({message: message.message})
}

[@Builder](/user/Builder)
function green(message: Tmp) {
  Button(message.message)
    .margin({bottom: 50})
    .backgroundColor(Color.Green)

  blue({message: message.message})
}

[@Builder](/user/Builder)
function blue(message: Tmp) {
  Button(message.message)
    .backgroundColor(Color.Blue)
}

![image](


更多关于关于HarmonyOS 鸿蒙Next中$$在@Builder装饰器作用的疑问的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-builder-V5#按引用传递参数看官网的这个示例就能看出来,你的示例,还不能看出来$$的作用。

class Tmp {
  paramA1: string = ''
}

@Builder
function overBuilder($$: Tmp) {
  Row() {
    Column() {
      Text(`overBuilder===${$$.paramA1}`)
      HelloComponent({ message: $$.paramA1 })
    }
  }
}

@Component
struct HelloComponent {
  [@Prop](/user/Prop) message: string;

  build() {
    Row() {
      Text(`HelloComponent===${this.message}`)
    }
  }
}

@Entry
@Component
struct Parent {
  @State label: string = 'Hello';

  build() {
    Column() {
      // Pass the this.label reference to the overBuilder component when the overBuilder component is called in the Parent component.
      overBuilder({ paramA1: this.label })
      Button('Click me').onClick(() => {
        // After Click me is clicked, the UI text changes from Hello to ArkUI.
        this.label = 'ArkUI';
      })
    }
  }
}

上面代码,是官网示例,HelloComponent中message使用@Prop修饰,使用$$,才能将tmp应用传递到HelloComponent中,如果你只是封装一个对象进行转递,调用HelloComponent肯定会报错的

更多关于关于HarmonyOS 鸿蒙Next中$$在@Builder装饰器作用的疑问的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


我的例子用的是状态管理器V2版本的装饰器,文档给出的例子还只停留在V1版本中,可能在V2版本里就不需要这个了?

那这么说,$$在文档中写的也是v1语法,

应该是了,文档里涉及$$的用例用的都是V1版本,没看到用在V2的,官方不新增的话我就认为不需要了😂,

在HarmonyOS鸿蒙Next中,$$@Builder装饰器中的作用并非一个直接由系统定义或广泛认可的符号。HarmonyOS的ArkUI框架中,@Builder装饰器主要用于简化组件的构建过程,通过链式调用方式设置组件属性。然而,$$这一符号在标准的@Builder用法中并没有特定的含义或作用。

在编程实践中,$$这样的符号有时会被用作内部实现细节的一部分,比如在某些编译时注解处理器或代码生成工具中,用于标记特定的代码片段或生成特定的代码逻辑。但在HarmonyOS官方文档中,并没有提及$$@Builder装饰器的直接关联。

如果你在代码中遇到了$$@Builder一起使用的情况,这可能是一个特定库、框架或工具链的自定义扩展,而非HarmonyOS标准API的一部分。为了准确理解其作用,建议查阅该库、框架或工具链的官方文档或源代码。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部