HarmonyOS 用Navigation NavRouter会不会使页面嵌套太深?

如果一个项目页面跳转层级比较多,而整个工程的Router页面栈有最大容量为32个页面的限制。用 Navigation NavRouter太多的话会不会使页面容器嵌套太深?有没有好的解决方案?

HarmonyOS
2天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Excelsior_abit

建议使用Navigation来替代Router,关于容器嵌套太深,目前所有栈都可以通过NavPathStack路由栈管理器,来进行管理。当子组件较多、较复杂时,由于Navigation组件一次性加载所有模块,使用常规加载会导致主页加载缓慢。为了减少主页渲染时间,可以使用动态加载,在实际页面跳转时再按需的动态引入子组件,优化用户的首次加载速度体验。

@Entry
@Component
struct DynamicHome {
  @Provide('pathInfos') pageInfos: NavPathStack = new NavPathStack()
  @State active: boolean = false
  @BuilderParam PageOneLoader: () => void
  @Builder
  PageMap(name: string) {
    if (name === 'pageOne') {
      this.PageOneLoader();
    }
  }
  build() {
    Navigation(this.pageInfos) {
      Column() {
        Button('PageOne', { stateEffect: true, type: ButtonType.Capsule })
          .onClick(() => {
            this.onEntryClick('pageOne')
          })
        ...
      }
    }.title('主页').navDestination(this.PageMap)
  }
  async loadPageOne(key: string){
    if (key === "pageOne") {
      let { PageOneLoader} = await import("../pages/PageOneLoader")
      this.PageOneLoader = PageOneLoader;
    }
  }

  // 点击事件,触发动态加载
  private onEntryClick(): void {
    try {
      this.loadPageOne('pageOne');
      this.pageInfos.clear();
      this.pageInfos.pushPathByName('pageOne', '');
      logger.info('DynamicImport Success');
    } catch (error) {
      logger.info('DynamicImport Fail');
    }
  }
}

被动态加载的组件pageOne组件用PageOneLoader函数封装,当PageOneLoader被调用时,会渲染pageOne页面。

import { pageOne } from './pageOne';
@Builder
export function PageOneLoader() {
  pageOne();
}
分享
微博
QQ
微信
回复
2天前
相关问题
HarmonyOS Navigation NavRouter NavDestination
66浏览 • 1回复 待解决
HarmonyOS ArkTS会不会支持多线程开发
13008浏览 • 4回复 待解决
HarmonyOS Navigation显示dialog问题
508浏览 • 1回复 待解决
HarmonyOS Navigation和router怎么
69浏览 • 1回复 待解决
Navigation二级导航嵌套
1293浏览 • 1回复 待解决
以后会不会出现一大波鸿蒙工程师?
6743浏览 • 6回复 待解决