HarmonyOS 鸿蒙Next 在@Builder中调用@BuilderParam不渲染UI嘛?

发布于 1周前 作者 wuwangju 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 在@Builder中调用@BuilderParam不渲染UI嘛?

代码如下,期待页面展示 测试 测试X,实际展示测试

// TestPage.ets
import { TestNewPageX } from './TestNewPageX'

@Entry
@Component
struct TestPage {
  [@Builder](/user/Builder)
  async StockBottomTypeBuilder() {
    Column() {
      Text('测试X')
    }
  }

  build() {
    Column() {
      TestNewPageX({ stockTypeBuilder: this.StockBottomTypeBuilder })
    }
  }
}

//TestNewPageX.ets

import { TestNewPage } from "./TestNewPage"

@Component
export struct TestNewPageX {
  [@BuilderParam](/user/BuilderParam) stockTypeBuilder: () => void;

  [@Builder](/user/Builder)
  async StockBottomTypeBuilder() {
    Column() {
      Text('测试')

      this.stockTypeBuilder()
    }
  }

  build() {
    Column() {
      TestNewPage({ stockBottomTypeBuilder: this.StockBottomTypeBuilder })
    }
  }
}
// TestNewPage.ets
@Component
export struct TestNewPage {
  [@BuilderParam](/user/BuilderParam) stockBottomTypeBuilder: () => void;

  build() {
    Column() {
      this.stockBottomTypeBuilder()
    }
  }
}

更多关于HarmonyOS 鸿蒙Next 在@Builder中调用@BuilderParam不渲染UI嘛?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

当调用自定义组件TestNewPage时,把[@Builder](/user/Builder)作为参数通过this.stockBottomTypeBuilder()的形式传递,当前this会指向自定义组件内部,所以在TestNewPageX组件里面改变stockTypeBuilder的值,自定义组件TestNewPage是感知不到的。可以使用箭头函数的形式把[@Builder](/user/Builder)传递进自定义组件,这样当前this指向会停留在父组件TestNewPageX里,当TestPage传递this.stockBottomTypeBuilder(),改变TestNewPageX中的stockTypeBuilder时,自定义组件TestNewPage就会感知到并重新渲染UI,达到需要的效果,即TestNewPageX.ets修改成下面的demo

//TestNewPageX.ets
import { TestNewPage } from "./TestNewPage"

@Component
export struct TestNewPageX {
  @BuilderParam stockTypeBuilder: () => void;

  @Builder
  async StockBottomTypeBuilder() {
    Column() {
      Text('测试')

      this.stockTypeBuilder()
    }
  }

  build() {
    Column() {
      TestNewPage({ stockBottomTypeBuilder: () => { this.StockBottomTypeBuilder() }})
    }
  }
}

更多关于HarmonyOS 鸿蒙Next 在@Builder中调用@BuilderParam不渲染UI嘛?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


HarmonyOS的分布式文件系统让我在多设备间传输文件变得轻松无比。

TestNewPageX中的build()改成如下:
  build() {
    Column() {
      TestNewPage({ stockBottomTypeBuilder: this.StockBottomTypeBuilder.bind(this) })
    }
  } 

在HarmonyOS鸿蒙Next中,@Builder注解通常用于组件的自定义构建过程,而@BuilderParam注解则用于定义构建过程中需要的参数。这两者主要关注于组件的构建逻辑,而非直接涉及UI渲染。

@Builder@BuilderParam主要作用于组件的构造和初始化阶段,它们负责将传入的参数组合并应用到组件的实例上。UI渲染是组件生命周期中的另一个阶段,通常在组件初始化完成后,由系统根据组件的状态和属性进行。

因此,@Builder中调用@BuilderParam并不会直接控制或影响UI的渲染。UI渲染是由系统根据组件的当前状态和布局文件自动完成的。

如果你在@Builder@BuilderParam的使用过程中遇到了UI不渲染的问题,很可能是因为其他因素导致的,比如组件的状态未正确更新、布局文件有误、或者渲染过程中发生了异常等。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。在这个页面上,你可以找到专业的客服团队,他们会为你提供更具体的帮助和解决方案。

回到顶部