HarmonyOS 鸿蒙Next 自定义组件,@Builder $$按引用传递参数时,在调用时传参,使用箭头函数改变this,该怎么写

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

HarmonyOS 鸿蒙Next 自定义组件,@Builder $$按引用传递参数时,在调用时传参,使用箭头函数改变this,该怎么写

ScrollContainer是自定义组件
----------------分割线----------------
```ruby
[@Builder](/user/Builder)
content($$: BarData) {
  Text($$.navBarHeight+'------------')
}
这样是好使的
build() {
ScrollContainer({
  content: this.content
})
}

改变this指向,箭头函数,这样不好使,该怎么写

ScrollContainer({
  content: (这里写什么) => {
    this.content(这里写什么)
  }
})

更多关于HarmonyOS 鸿蒙Next 自定义组件,@Builder $$按引用传递参数时,在调用时传参,使用箭头函数改变this,该怎么写的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

可以使用@BuilderParam进行重写逻辑

更多关于HarmonyOS 鸿蒙Next 自定义组件,@Builder $$按引用传递参数时,在调用时传参,使用箭头函数改变this,该怎么写的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,使用@Builder进行自定义组件开发时,如果需要按引用传递参数并在调用时使用箭头函数改变this的指向,可以按照以下方式编写代码:

@Builder
function MyBuilder($$: { onClick: () => void }) {
  Button($$)
    .onClick(() => {
      $$.onClick();
    });
}

@Entry
@Component
struct MyComponent {
  private message: string = "Hello, HarmonyOS!";

  build() {
    Column() {
      MyBuilder({
        onClick: () => {
          this.showMessage();
        }
      })
    }
  }

  private showMessage() {
    console.log(this.message);
  }
}

在这个例子中,MyBuilder是一个自定义的@Builder函数,它接受一个包含onClick方法的对象作为参数。在MyComponent组件中,调用MyBuilder时传递了一个箭头函数作为onClick参数,这个箭头函数内部调用了MyComponentshowMessage方法。通过这种方式,箭头函数确保了this指向MyComponent实例,从而能够正确访问message属性。

在HarmonyOS鸿蒙Next中,使用@Builder自定义组件时,若要通过引用传递参数并使用箭头函数改变this,可以这样写:

@Builder
function customBuilder($$: (arg: any) => void) {
  $$(() => {
    // 这里的 this 指向当前组件实例
    this.someMethod();
  });
}

// 调用时
customBuilder((arg) => {
  arg(); // 调用箭头函数,保持 this 指向
});

通过箭头函数,确保this指向当前组件实例,避免上下文丢失。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!