@Link引用的Object数组导致组件不走生命周期

@Link引用的Object数组导致组件不走生命周期,改用@ObjectLink引用可以,但是当数组发生变化时,在兄弟控件中@Watch方法没有回调.正集列表模块中切季的时候需要更新剧集列表,切季列表控件中的数据用@Link 引用的数组无法渲染;使用@ObjectLink可以渲染,但是数组发生变化,剧集列表中的监听@Watch接收不到;

tablist 代码如下:

@Component 
export struct VodClipTabsList { 
 
  @ObjectLink tabs: ObservedArray<MGMediaInfoModuleTab>; 
 
  ///当前第几季的tabId 
  @State currentTabId: string = ''; 
 
  ///点击回调 
  public didSelectTab?: (index: number, tab: MGMediaInfoModuleTab) => void; 
 
  private tabScroller = new Scroller(); 
 
  aboutToAppear() { 
    if (this.tabs.length > 0 ) { 
      this.tabs.every((tab: MGMediaInfoModuleTab) => { 
        if (tab.current === 1) { 
          this.currentTabId = tab.tabId ?? '' 
        } 
      }) 
    } 
  } 
 
  build() { 
    List({scroller: this.tabScroller}) { 
      ListItem(){ 
        Row(){}.height('100%').width(15) 
      } 
      ForEach(this.tabs, (tabItem: MGMediaInfoModuleTab, idx: number)=> { 
        ListItem(){ 
          VodClipTabItem({tab: tabItem, index: idx, isEnd:idx === (this.tabs.length - 1) ? true : false, currentTabId: this.currentTabId }) 
        }.onClick(()=>{ 
          this.tabItemClickHandler(tabItem, idx); 
        }) 
      }, (tab: MGMediaInfoModuleTab) => tab.tabId) 
      ListItem(){ 
        Row(){}.height('100%').width(15) 
      } 
    }.scrollBar(BarState.Off) 
    .listDirection(Axis.Horizontal) 
    .height(28) 
    .width('100%') 
  } 
 
  ///切季 
  tabItemClickHandler(tab: MGMediaInfoModuleTab, index: number) { 
    if (this.currentTabId === tab.tabId) { return } 
    this.tabs.every((tab) => { 
      tab.current = 0; 
    }) 
    tab.current = 1; 
 
    this.currentTabId = tab.tabId ?? ''; 
    if (this.didSelectTab) { 
      this.didSelectTab(index, tab); 
    } 
  } 
 
} 
 
@Component 
struct VodClipTabItem { 
 
  @Prop tab: MGMediaInfoModuleTab; 
  @Prop index: number; 
  @Prop isEnd: boolean; 
 
  @Link currentTabId: string; 
 
  build() { 
    Row(){ 
      if (this.index > 0) { 
        Blank().width(10) 
      } 
      Text(this.tab.name).font({size: 14, weight: FontWeight.Medium}).fontColor(this.tab.tabId === this.currentTabId ? VodSkinTheme.hlColor() : VodSkinTheme.dfColor({alpha:0.4})) 
 
      if (!this.isEnd) { 
        Blank().width(10) 
        Text('/').height('100%').fontColor('rgba(0,0,0,0.2)') 
      } 
    }.justifyContent(FlexAlign.Start) 
    .height('100%') 
  } 
 
} 
 
//MGMediaInfoModuleTab: 
export class MGMediaInfoModuleTab { 
  @Expose() tabId?: string; // tab id 
  @Expose() name?: string; // tab名称 
  @Expose() current: number = 0;// 是否为当前tab 
 
  @Type(()=>MGMediaInfoModuleTabItem) 
  @Expose() item?: MGMediaInfoModuleTabItem 
}
HarmonyOS
2024-06-03 23:37:26
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
l634youngpig

@objectlink装饰的变量,其修改只能传递给@observed装饰的类,@objectlink不能与@link搭配使用.

文档链接:

@Observed装饰器和@ObjectLink装饰器

分享
微博
QQ
微信
回复
2024-06-04 22:34:32
相关问题
弹窗组件无法调用生命周期接口
664浏览 • 1回复 待解决
监听Ability生命周期
479浏览 • 1回复 待解决
如何监听AbilitySlice生命周期
3874浏览 • 1回复 待解决
swiper切换监听生命周期
429浏览 • 1回复 待解决
JMS 消息怎么设置生命周期呢?
1419浏览 • 1回复 待解决
如何理解和重写onBackPress生命周期
777浏览 • 1回复 待解决
如何使用AbilityStage生命周期函数
724浏览 • 1回复 待解决
公共事件生命周期是怎样
453浏览 • 1回复 待解决
Ability生命周期回调函数有哪些呢?
4110浏览 • 1回复 待解决