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

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

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

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

HarmonyOS
2024-09-02 10:43:55
1.1w浏览
收藏 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) 
  } 
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.

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%') 
  } 
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.

UserInfo.ets

@Observed 
export class UserInfo { 
  name: string 
 
  constructor(name: string) { 
    this.name = name 
  } 
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

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

分享
微博
QQ
微信
回复
2024-09-02 17:42:00
相关问题
HarmonyOS 关于Tabs组件TabContent问题
732浏览 • 1回复 待解决
Tabs组件TabContent滑到边缘问题
1063浏览 • 0回复 待解决
HarmonyOS Tabs框架切换问题
643浏览 • 1回复 待解决
HarmonyOS TabContent内容如何手动刷新
724浏览 • 1回复 待解决
HarmonyOS Tabs组件怎么动态添加TabContent
1043浏览 • 1回复 待解决
HarmonyOS 数据刷新问题
776浏览 • 1回复 待解决
HarmonyOS 页面数据刷新问题
907浏览 • 1回复 待解决
HarmonyOS LazyForEach数据刷新问题
691浏览 • 1回复 待解决
HarmonyOS swiper数据刷新问题
661浏览 • 1回复 待解决
数据绑定框架使用问题
6975浏览 • 1回复 待解决
HarmonyOS List组件动态刷新数据问题
1914浏览 • 1回复 待解决