HarmonyOS Navigtion组件,两个NavDestination之间如何同步状态变量

Page与Page之间可以通过 LocalStorage 同步状态;那么Navigation的 NavDestination之间怎么同步呢?

我的测试结论: 两个NavDestination之间不构成父子关系,所有的组件间状态变量(state/prop/link/provide/consume等)会crash。

尝试:

1. 将状态放在Navigation根上面,其他NavDestination 去consume,可以,但不合理,复杂状态无法维护。

2. 尝试在NavDestination 的component 加上@Entity,然后去用LocalStorage,未去实践。这方案也是奇葩。

如何在两个NavDestination之间同步状态。

HarmonyOS
2024-09-25 12:06:42
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zxjiu

使用Navigation时所有的NavDestination共用同一个根页面,只需要在根页面绑定localStroage并写入变量,所有的子组件都可以直接用@LocalStorageLink读取。

let para: Record<string, number> = { 'PropA': 1 };  
let storage: LocalStorage = new LocalStorage(para);  
  
@Entry(storage)  
@Component  
struct Index {  
  @State message: string = 'Hello World';  
  @LocalStorageLink('PropA') linkNumber: number = 1;  
  @Provide pageInfo: NavPathStack = new NavPathStack()  
  
  @Builder  
  pageMap(name: string) {  
    if (name === 'page1') {  
      Page1()  
    } else if (name === 'page2') {  
      Page2()  
    }  
  }  
  
  build() {  
    Navigation(this.pageInfo) {  
      Text(this.linkNumber.toString()).onClick(() => {  
        this.linkNumber++;  
      })  
      Button('to page1').onClick(() => {  
        this.pageInfo.pushPathByName('page1', null)  
      })  
    }  
    .navDestination(this.pageMap)  
  }  
}  
  
  
@Component  
struct Page1 {  
  @Consume pageInfo: NavPathStack  
  @LocalStorageLink('PropA') childLinkNumber: number = 1;  
  
  build() {  
    NavDestination() {  
      Column() {  
        Text(this.childLinkNumber.toString()).onClick(() => {  
          this.childLinkNumber++  
        })  
        Button('to page2').onClick(() => {  
          this.pageInfo.pushPathByName('page2', null)  
        })  
      }  
    }  
  }  
}  
  
@Component  
struct Page2 {  
  @LocalStorageLink('PropA') childLinkNumber: number = 1;  
  
  build() {  
    NavDestination() {  
      Column() {  
        Text(this.childLinkNumber.toString()).onClick(() => {  
          this.childLinkNumber++  
        })  
      }  
    }  
  }  
}
分享
微博
QQ
微信
回复
2024-09-25 16:28:51
相关问题
状态变量和常规变量有什么区别?
460浏览 • 2回复 待解决
HarmonyOS 状态变量不刷新问题
437浏览 • 1回复 待解决
ArkTS中如何监听状态变量的变化?
965浏览 • 1回复 待解决
关于状态变量@state必须知道的事
1104浏览 • 1回复 待解决
HarmonyOS 两个枚举类型之间转换问题
113浏览 • 1回复 待解决
HarmonyOS 变量状态同步问题
255浏览 • 1回复 待解决
HarmonyOS 两个同级的组件问题
392浏览 • 1回复 待解决