HarmonyOS 鸿蒙Next中@Builder自定义构建函数同时接收按值传递和按引用传递的参数时,会导致接收失效

HarmonyOS 鸿蒙Next中@Builder自定义构建函数同时接收按值传递和按引用传递的参数时,会导致接收失效

突发奇想,如果自定义构建函数同时接收按值传递和按引用传递的参数会怎么样?然后就出现问题了😂

看自定义构建函数中的打印的话似乎并没有接收到对应的参数

```javascript
[@Builder](/user/Builder) function testBuilder($: { count: number }, num: number) {
  Button(`${$$.count}`)
    .width(100)
    .height(50)
    .backgroundColor(Color.Gray)
    .onClick(() => {
      console.log(`count按钮中count=${$$.count}`)
    })

  Button(`${num}`)
    .width(100)
    .height(50)
    .backgroundColor(Color.Blue)
    .onClick(() => {
      console.log(`num按钮中num=${num}`)
    })
}

[@Entry](/user/Entry)
[@Component](/user/Component)
struct Index {
  [@State](/user/State) count: number = 0;
  [@State](/user/State) num: number = 0;

  build() {
    Column() {
      Button('count ++')
        .width(100)
        .height(50)
        .backgroundColor(Color.Red)
        .onClick(() => {
          this.count++
          this.num++
          console.log(`count++按钮中count=${this.count}, num=${this.num}`)
        })

      testBuilder({count: this.count}, this.num)
    }
  }
}

更多关于HarmonyOS 鸿蒙Next中@Builder自定义构建函数同时接收按值传递和按引用传递的参数时,会导致接收失效的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

工单回复:@Builder装饰器使用时,只有传入一个参数,且参数需要直接传入对象字面量才会按引用传递,其余传递方式均为按值传递。

所以上面的写法是按值传递,而且目前暂不支持同时按值传递和按引用传递。

更多关于HarmonyOS 鸿蒙Next中@Builder自定义构建函数同时接收按值传递和按引用传递的参数时,会导致接收失效的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


我是api10,引用传递报错啊

cke_485.png

我没用API 10,看一下报错信息呢,如果是问题可以提工单给官方,

在HarmonyOS鸿蒙Next中,@Builder自定义构建函数同时接收按值传递和按引用传递的参数时,可能会导致参数接收失效。这是因为鸿蒙的@Builder函数在处理参数时,对值类型和引用类型的处理机制不同。值类型参数会进行拷贝,而引用类型参数则直接传递引用。如果同时使用两种传递方式,可能会导致参数传递混乱或失效。建议在@Builder函数中统一使用一种参数传递方式,或通过明确的参数类型和传递方式来避免冲突。

回到顶部