HarmonyOS tabs + TabContent 框架刷新数据的问题

每次切换到我的页面时,需要重新获取用户信息并更新展示数据。目前是在aboutToAppear()方法中更新的数据,但是发现aboutToAppear()方法只会调用一次(部分代码见图片)。有没有其他的周期方法在每次点击“我的”标签页时都会调用。 或者通过其他方式通知“我的”页面刷新数据。

HarmonyOS tabs + TabContent 框架刷新数据的问题-鸿蒙开发者社区

HarmonyOS tabs + TabContent 框架刷新数据的问题-鸿蒙开发者社区

HarmonyOS
2024-09-02 10:43:55
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
superinsect

可参考如下demo:

index.ets

import { UserInfo } from './UserInfo' 
import { router } from '@kit.ArkUI'; 
 
//写在ability更合适 
AppStorage.setOrCreate('userInfo', new UserInfo("name1")); 
 
@Entry 
@Component 
struct TabsExample { 
  @State fontColor: string = '#182431' 
  @State selectedFontColor: string = '#007DFF' 
  @State currentIndex: number = 0 
  private controller: TabsController = new TabsController() 
  @State userInfo: SubscribedAbstractProperty<UserInfo> = AppStorage.link('userInfo'); 
 
  onPageShow(): void { 
    this.userInfo = AppStorage.link('userInfo') 
  } 
 
  @Builder 
  tabBuilder(index: number, name: string) { 
    Column() { 
      Text(name) 
        .fontColor(this.currentIndex === index ? this.selectedFontColor : this.fontColor) 
        .fontSize(16) 
        .fontWeight(this.currentIndex === index ? 500 : 400) 
        .lineHeight(22) 
        .margin({ top: 17, bottom: 7 }) 
      Divider() 
        .strokeWidth(2) 
        .color('#007DFF') 
        .opacity(this.currentIndex === index ? 1 : 0) 
    }.width('100%') 
  } 
 
  build() { 
    Column() { 
      Tabs({ barPosition: BarPosition.Start, index: this.currentIndex, controller: this.controller }) { 
        TabContent() { 
          Column().width('100%').height('100%').backgroundColor('#00CB87') 
        }.tabBar(this.tabBuilder(0, 'green')) 
 
        TabContent() { 
          Column().width('100%').height('100%').backgroundColor('#007DFF') 
        }.tabBar(this.tabBuilder(1, 'blue')) 
 
        TabContent() { 
          Column().width('100%').height('100%').backgroundColor('#FFBF00') 
        }.tabBar(this.tabBuilder(2, 'yellow')) 
 
        TabContent() { 
          Info({ userInfo: this.userInfo.get() }) 
            .onClick(() => { 
              router.pushUrl({ 
                url: 'pages/login' 
              }) 
            }) 
        }.tabBar(this.tabBuilder(3, 'pink')) 
      } 
      .vertical(false) 
      .barMode(BarMode.Fixed) 
      .barWidth(360) 
      .barHeight(56) 
      .animationDuration(400) 
      .onChange((index: number) => { 
        this.currentIndex = index 
        // //到了个人信息页面,刷新name 
        // if (index == 3) { 
        // this.userInfo.set(new UserInfo("name2222")) 
        // } 
      }) 
      .width(360) 
      .height(296) 
      .margin({ top: 52 }) 
      .backgroundColor('#F1F3F5') 
    }.width('100%') 
  } 
} 
 
@Component 
struct Info { 
  @Prop userInfo: UserInfo 
 
  build() { 
    Text(this.userInfo.name) 
  } 
}

login.ets

import { UserInfo } from './UserInfo'; 
 
AppStorage.setOrCreate('name', "nameundefined"); 
 
@Entry 
@Component 
struct Login { 
  @State 
  userInfo: SubscribedAbstractProperty<UserInfo> = AppStorage.link('userInfo'); 
 
  build() { 
    Column() { 
      Text(this.userInfo.get().name) 
      Button("点击按钮登录").onClick(() => { 
        this.userInfo.set(new UserInfo("nameY")) 
      }) 
    }.width('100%') 
  } 
}

UserInfo.ets

@Observed 
export class UserInfo { 
  name: string 
 
  constructor(name: string) { 
    this.name = name 
  } 
}

某一条数据变化了,建议是精准控制刷新对应数据即可,无需列表整体重新查询获取数据。

分享
微博
QQ
微信
回复
2024-09-02 17:42:00
相关问题
HarmonyOS 关于Tabs组件TabContent问题
71浏览 • 1回复 待解决
Tabs组件TabContent滑到边缘问题
426浏览 • 0回复 待解决
HarmonyOS Tabs框架切换问题
19浏览 • 1回复 待解决
HarmonyOS TabContent内容如何手动刷新
2浏览 • 1回复 待解决
HarmonyOS 数据刷新问题
103浏览 • 1回复 待解决
HarmonyOS 页面数据刷新问题
27浏览 • 1回复 待解决
HarmonyOS swiper数据刷新问题
37浏览 • 1回复 待解决
数据绑定框架使用问题
6015浏览 • 1回复 待解决
HarmonyOS List组件动态刷新数据问题
1046浏览 • 1回复 待解决