【问题标题】:React Ionic Tabs nested Routes Animación no worksReact Ionic Tabs nested Routes Animación 无效
【发布时间】:2021-07-19 10:32:55
【问题描述】:

我尝试了不同的方式来创建带有选项卡的嵌套路由,想法如下:

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

问题在于首页的入口动画和离开的情况,在 Welcomepage 到 LoginPage 的情况下,如果它工作,也是从食谱页倒退到首页。

我知道问题在于 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 上。

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

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

  • 如果您删除上面评论的内容,将如下所示:

谢谢!

编辑

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

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>
);

想法是这样做:login->tab1,tab1->login。

【问题讨论】:

  • 那些IonTabButton 组件,他们是否应该渲染某种Link 组件并使用to 道具而不是锚标记的href?您用react-routerreact-router-dom 标记了这个问题,并且这些都没有使用href 属性。
  • Ionic 导航使用 react-router-dom 工作,这些组件来自基于上述库的 Ionic 框架,这就是为什么带有该标签的标签,主题密切相关。
  • 我完全理解并意识到这一事实,但我说他们使用带有to 属性的Link 组件,而不是带有href 属性的锚标签或按钮。你在哪里应用路线过渡动画?到目前为止,对我来说,您的 sn-p 中没有任何内容暗示 react-routerreact-router-dom 存在问题。也许Animated Transitions 示例中的某些内容可以提供帮助。
  • 动画是离子框架的默认设置,通过 IonReactRouter 和 IonRouterOutlet 组件,我的问题是动画部分工作,在某些路线上他们没有。我不想添加任何新动画,无论如何,谢谢。
  • 好的,知道了。然后删除不相关的标签。

标签: reactjs ionic-framework ionic-react


【解决方案1】:

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

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

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

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

【讨论】:

  • 你好,谢谢你的回答,你告诉我的一切我之前已经尝试过,我也已经看过几个例子,代码是这样的,因为我尝试了几件事来实现正确的动画,我也尝试创建一个新项目并尝试这样做与示例中的相同,但我不能,我不确定,但我设法做到这一点的唯一方法是安装某些版本的依赖项,就像我在这个repository 中所做的那样,在这个存储库中,我使用组件属性、渲染还是作为子属性并不重要。
  • 您是否尝试为选项卡之间的过渡设置动画?如果是这样,这不是一个好习惯。本机平台不这样做,离子标签也不这样做。为这些过渡设置动画意味着层次结构,但每个选项卡都是彼此的兄弟。
  • 我尝试制作选项卡中的路由与不在选项卡中的其他路由之间的过渡动​​画,我的应用程序中只有一个选项卡组件
  • 请看这个codesandbox,它是我想要实现的更简单的复制品,我从标签的离子反应基础创建了这个项目,在那里你可以看到tab1到之间的动画login 不起作用,因为有一会儿它看起来是白色的,而如果它工作正常则登录到 tab1。
  • 如果您创建一个单独的选项卡组件,例如 ionic 会议应用程序而不是 ionic 选项卡应用程序,就像在这个 codesandbox 中一样,它应该可以工作。
猜你喜欢
  • 2022-12-02
  • 2016-08-11
  • 1970-01-01
  • 2023-01-09
  • 1970-01-01
  • 2018-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多