HarmonyOS PixelMap等通过NAPI提供的复杂类型,由于有部分实现在Native侧,在组件间如何传递?

PixelMap等通过NAPI提供的复杂类型,由于有部分实现在Native侧,在组件之间如何传递。 prop中已明确表示不支持了。

引用文档原文:

限制条件

@Prop装饰变量时会进行深拷贝,在拷贝的过程中除了基本类型、Map、Set、Date、Array外,都会丢失类型。例如PixelMap等通过NAPI提供的复杂类型,由于有部分实现在Native侧,因此无法在ArkTS侧通过深拷贝获得完整的数据。

link方式直接崩溃。

HarmonyOS
2024-09-25 11:20:35
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zbw_apple

@Link装饰:在子组件中使用@Link装饰状态变量需要保证该变量与数据源类型完全相同,且该数据源需为被诸如@State等装饰器装饰的状态变量。

组件间数据传递可参考:@Provide装饰器和@Consume装饰器,@Observed装饰器和@ObjectLink装饰器。

同时,如果该变量无需作为状态变量,可不添加装饰器,直接在组件间传递。

let icon: Resource = $r('app.media.app_icon')  
let context = getContext()  
let iconDescriptor = context.resourceManager.getDrawableDescriptor(icon);  
let iconPixel = iconDescriptor.getPixelMap()  
  
@Entry  
@Component  
struct pixelTest {  
  @State icon: PixelMap = iconPixel;  
  
  build() {  
    Column() {  
      Image(this.icon)  
        .width(100).height(100)  
      subComponent({  
        icon: this.icon,  
        icon2: this.icon  
      })  
    }.width('100%').height('100%')  
  }  
}  
  
@Component  
struct subComponent {  
  @Link icon: PixelMap;  
  icon2: PixelMap | ResourceStr = '';  
  
  build() {  
    Column() {  
      Image(this.icon)  
        .width(100).height(100)  
      Image(this.icon2)  
        .width(100).height(100)  
    }  
  }  
}
分享
微博
QQ
微信
回复
2024-09-25 16:47:05
相关问题
如何实现应用组件信息传递
336浏览 • 1回复 待解决
TS如何批量传递函数到native
993浏览 • 1回复 待解决
Native如何通过napi获取ArrayBuffer?
3676浏览 • 1回复 待解决
Native释放ArkTS对象方法
513浏览 • 1回复 待解决
HarmonyOS 如何实现组件通信
484浏览 • 1回复 待解决