@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页面息屏和激活生命周期不走
78浏览 • 1回复 待解决
HarmonyOS 生命周期不触发
78浏览 • 1回复 待解决
HarmonyOS 是否有支持应用生命周期、页面生命周期、组件生命周期Hook的API?
406浏览 • 0回复 待解决
HarmonyOS 页面组件的生命周期、自定义组件生命周期监听问题
19浏览 • 1回复 待解决
HarmonyOS navdestination的生命周期,与页面和组件生命周期的关系
46浏览 • 1回复 待解决
Dialog组件生命周期问题
350浏览 • 1回复 待解决
HarmonyOS TabContent页面生命周期不触发
449浏览 • 1回复 待解决
HarmonyOS Navigation跳转的组件生命周期
625浏览 • 2回复 待解决
如何知晓navigation组件生命周期?
275浏览 • 1回复 待解决
HarmonyOS tab组件生命周期问题
41浏览 • 1回复 待解决
HarmonyOS Component生命周期函数 onPageShow()不生效
522浏览 • 1回复 待解决
TabContent 内容的生命周期
433浏览 • 1回复 待解决
HarmonyOS 生命周期的区别
2浏览 • 1回复 待解决
HarmonyOS 自定义组件生命周期
55浏览 • 1回复 待解决
弹窗组件无法调用生命周期接口
2262浏览 • 1回复 待解决
HarmonyOS Navigation生命周期
31浏览 • 1回复 待解决
监听Ability生命周期
1203浏览 • 1回复 待解决
如何对UIAbility组件的生命周期进行理解?
548浏览 • 1回复 待解决
#鸿蒙通关秘籍#UIAbility组件的生命周期管理
151浏览 • 2回复 待解决
HarmonyOS 生命周期包含onReady onShown等的组件
32浏览 • 1回复 待解决
AbilityStage组件容器的生命周期和回调
2995浏览 • 1回复 待解决
Window窗口的生命周期问题
347浏览 • 1回复 待解决
如何监听AbilitySlice的生命周期
5132浏览 • 1回复 待解决
应用内的生命周期流转
656浏览 • 1回复 待解决
HarmonyOS 普通对象怎么监听组件生命周期
59浏览 • 1回复 待解决
@objectlink装饰的变量,其修改只能传递给@observed装饰的类,@objectlink不能与@link搭配使用.
文档链接:
@Observed装饰器和@ObjectLink装饰器