@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
待解决
相关问题
Dialog组件生命周期问题
254浏览 • 1回复 待解决
HarmonyOS 是否有支持应用生命周期、页面生命周期、组件生命周期Hook的API?
269浏览 • 0回复 待解决
HarmonyOS TabContent页面生命周期不触发
297浏览 • 1回复 待解决
监听Ability生命周期
1051浏览 • 1回复 待解决
HarmonyOS Navigation跳转的组件生命周期
429浏览 • 2回复 待解决
如何知晓navigation组件生命周期?
176浏览 • 1回复 待解决
如何对UIAbility组件的生命周期进行理解?
386浏览 • 1回复 待解决
HarmonyOS Component生命周期函数 onPageShow()不生效
187浏览 • 1回复 待解决
如何监听AbilitySlice的生命周期
5054浏览 • 1回复 待解决
应用内的生命周期流转
505浏览 • 1回复 待解决
HarmonyOS 模块生命周期管理
141浏览 • 1回复 待解决
弹窗组件无法调用生命周期接口
2110浏览 • 1回复 待解决
TabContent 内容的生命周期
263浏览 • 1回复 待解决
HarmonyOS App的生命周期是什么?
305浏览 • 2回复 待解决
AbilityStage组件容器的生命周期和回调
2559浏览 • 1回复 待解决
如何监听全局Ability生命周期?
281浏览 • 1回复 待解决
#鸿蒙通关秘籍# ArkWeb组件的生命周期管理如何实现?
60浏览 • 1回复 待解决
自定义组件能否获取page的生命周期呢?
154浏览 • 1回复 待解决
Window窗口的生命周期问题
246浏览 • 1回复 待解决
HarmonyOS List中LazyForEach嵌套Component组件生命周期问题
232浏览 • 1回复 待解决
swiper切换监听生命周期
907浏览 • 1回复 待解决
如何监听subwindow生命周期
296浏览 • 1回复 待解决
如何监听指定Ability的生命周期变化?
347浏览 • 1回复 待解决
HarmonyOS 请问NavDestination作为根容器的页面添加了@Entry为什么没有走页面的生命周期?
264浏览 • 1回复 待解决
HarmonyOS navigation主页面生命周期
301浏览 • 1回复 待解决
@objectlink装饰的变量,其修改只能传递给@observed装饰的类,@objectlink不能与@link搭配使用.
文档链接:
@Observed装饰器和@ObjectLink装饰器