@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
      
        赞
        
 收藏 0
 回答 1
 
        待解决
        
相关问题
 HarmonyOS  navigation页面息屏和激活生命周期不走 
876浏览  • 1回复 待解决
HarmonyOS  生命周期不触发 
994浏览  • 1回复 待解决
HarmonyOS 是否有支持应用生命周期、页面生命周期、组件生命周期Hook的API? 
1777浏览  • 1回复 待解决
HarmonyOS 页面组件的生命周期、自定义组件生命周期监听问题 
1399浏览  • 1回复 待解决
HarmonyOS navdestination的生命周期,与页面和组件生命周期的关系 
1820浏览  • 1回复 待解决
Dialog组件生命周期问题 
1425浏览  • 1回复 待解决
HarmonyOS TabContent页面生命周期不触发 
1814浏览  • 1回复 待解决
HarmonyOS Navigation跳转的组件生命周期 
2686浏览  • 2回复 待解决
HarmonyOS  tab组件生命周期问题 
1191浏览  • 1回复 待解决
HarmonyOS 首页组件生命周期问题 
1059浏览  • 1回复 待解决
如何知晓navigation组件生命周期? 
1237浏览  • 1回复 待解决
HarmonyOS Component生命周期函数 onPageShow()不生效 
2625浏览  • 1回复 待解决
Page与Ability的生命周期冲突导致数据丢失,如何规避? 
539浏览  • 0回复 待解决
HarmonyOS 自定义组件生命周期 
1251浏览  • 1回复 待解决
HarmonyOS 生命周期的区别 
1542浏览  • 1回复 待解决
监听Ability生命周期 
2547浏览  • 1回复 待解决
HarmonyOS Navigation生命周期 
1292浏览  • 1回复 待解决
HarmonyOS Navigation 生命周期 
1047浏览  • 1回复 待解决
弹窗组件无法调用生命周期接口 
3826浏览  • 1回复 待解决
TabContent 内容的生命周期 
1779浏览  • 1回复 待解决
#鸿蒙通关秘籍#UIAbility组件的生命周期管理 
1578浏览  • 2回复 待解决
如何对UIAbility组件的生命周期进行理解? 
1830浏览  • 1回复 待解决
HarmonyOS 生命周期包含onReady onShown等的组件 
1413浏览  • 1回复 待解决
AbilityStage组件容器的生命周期和回调 
5489浏览  • 1回复 待解决
应用内的生命周期流转 
2042浏览  • 1回复 待解决





















@objectlink装饰的变量,其修改只能传递给@observed装饰的类,@objectlink不能与@link搭配使用.
文档链接:
@Observed装饰器和@ObjectLink装饰器