React Ionic Tabs 嵌套路由 Animación 无效

如何解决React Ionic Tabs 嵌套路由 Animación 无效

我尝试了不同的方法来使用 Tabs 创建嵌套路由,想法如下:

  • WelcomePage->LoginPage->HomePage(Tab)->RecipePage

问题出在首页的入口动画和离开,如果Welcomepage到LoginPage有效,也会从recipepage倒退到homepage。

我知道问题在于 IonrouterOutlet 和 Route,因为它们是有组织的,但是我已经将我想到的组合做了我,并使用了几种方法来渲染路由中的组件,就像渲染一样,组件,也作为儿童。如果有人做过类似的事情并获得了最佳效果,或者可能发生了一些被忽视的事情,我将不胜感激,谢谢。

这是我的app.tsx(总结,除了/signup,我还有更多路由,大约50条路由):

      <IonApp>
        <IonReactRouter>
          <IonContent> // This Content only makes sense here because,the white space
                         // which replaces the animation turns black,blank looks better.
            <IonRouterOutlet>
              <Route path="/home"> //La ruta de las tabs
                <Home />
              </Route>
              <Route path="/signUp" exact>
                <SignUp />
              </Route>
             </IonRouterOutlet>
          </IonContent>
        </IonReactRouter>
      </IonApp>

My Home.tsx(共 4 条路线):

    <IonTabs>
      <IonRouterOutlet>
        <Route path="/home/search" exact>
          <Search />
        </Route>
        <Route path="/home/explore" exact>
          <Explore />
        </Route>
        <Redirect exact path="/home" to="/home/search" />
      </IonRouterOutlet>
      <IonTabBar slot="bottom" className="py-1">
        <IonTabButton tab="search" href="/home/search">
          <IonIcon icon={searchOutline} />
          <IonLabel>{textos["page_buscar"]}</IonLabel>
        </IonTabButton>
        <IonTabButton tab="explore" href="/home/explore">
          <IonIcon icon={navigateOutline} />
          <IonLabel>{textos["page_explorar"]}</IonLabel>
        </IonTabButton>
      </IonTabBar>
    </IonTabs>
  • 一个更图形化的示例,用于欣赏白屏,这应该是动画的地方,这是在 Android 上。

enter image description here

  • 在 iPhone 上,PageRecipesList(/recipes) 到 PageRecipe(/recipe) 的动画(无标签):

enter image description here

  • 在iphone上PageHomeSearch(Tab home/search)的动画 PageRecipesList(/recipes):

enter image description here

enter image description here

谢谢!

编辑

和我想做的一样,但只有一个文件

app.tsx:

const App: React.FC = () => (
  <IonApp>
    <IonReactRouter>
      <IonRouterOutlet>
        <Route exact path="/login">
          <Login />
        </Route>
        <IonTabs>
          <IonRouterOutlet>
            <Route exact path="/tab1">
              <Tab1 />
            </Route>
            <Route exact path="/tab2">
              <Tab2 />
            </Route>
            <Route path="/tab3">
              <Tab3 />
            </Route>
            <Route exact path="/">
              <Redirect to="/tab1" />
            </Route>
          </IonRouterOutlet>
          <IonTabBar slot="bottom">
            <IonTabButton tab="tab1" href="/tab1">
              <IonIcon icon={triangle} />
              <IonLabel>Tab 1</IonLabel>
            </IonTabButton>
            <IonTabButton tab="tab2" href="/tab2">
              <IonIcon icon={ellipse} />
              <IonLabel>Tab 2</IonLabel>
            </IonTabButton>
            <IonTabButton tab="tab3" href="/tab3">
              <IonIcon icon={square} />
              <IonLabel>Tab 3</IonLabel>
            </IonTabButton>
          </IonTabBar>
        </IonTabs>
      </IonRouterOutlet>
    </IonReactRouter>
  </IonApp>
);

想法是这样做:登录->tab1,然后tab1->登录

解决方法

看看 Ionic 如何在他们的 Ionic React Conference Starter 应用程序中解决这个问题,特别是来自 App.tsx 的 this snippet 和来自他们的选项卡组件 MainTabs.tsx 的 this snippet

从您的示例代码中,以下更改应该可以解决动画问题:

  • 在 App.tsx 中,删除 IonContent
  • 在 App.tsx 中,使用渲染方法 prop 而不是嵌套 Home 组件(例如,<Route path="/home" render={() => <Home />} /> 而不是 <Route path="/home"><Home /></Route>
  • 同理,使用 Home.tsx 中的 render 方法 prop,带标签的组件
  • 在标签页的组件(在您的示例中为 SearchExplore)确保使用 IonPage,因为这是实现动画导航所必需的(请参阅 docs) ,例如
<IonPage>
  <IonHeader>...</IonHeader>
  <IonContent>...</IonContent>
</IonPage>

一般来说,按照他们的 docs 中的解释和他们的 example app 中演示的 Ionic 架构,它应该可以正常工作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?