React + Ionic 5:标签导航问题

Mar*_*hel 2 javascript reactjs ionic-framework ionic5

我无法让标签导航正常工作。

到目前为止,这是我的代码:

应用程序.tsx:

const App: React.FC = () =>
  <IonApp>
      <IonReactRouter>
          <IonRouterOutlet id="main">
              <Route exact path="/" render={() => <Redirect to="/home"/>}/>
              <Route path="/home" render={(props) => <Home {...props}/>} exact={true}/>
          </IonRouterOutlet>
      </IonReactRouter>
  </IonApp>
)

Run Code Online (Sandbox Code Playgroud)

主页.tsx:

const Home: React.FC<RouteComponentProps> = (props: RouteComponentProps) => (
    <IonPage>
        <IonTabs>
            <IonRouterOutlet id='tabs'>
                <Route path='/:tab(myDecks)' render={(props) => <MyDecks {...props} />} exact/>
                <Route path='/:tab(explore)' render={(props) => <Explore {...props} />} exact/>
                <Redirect from='/home' to='/myDecks'/>
            </IonRouterOutlet>
            <IonTabBar slot='bottom'>
                <IonTabButton tab='myDecks' href='/myDecks'>
                    <IonLabel>My Decks</IonLabel>
                </IonTabButton>
                <IonTabButton tab='explore' href='/explore'>
                    <IonLabel>Explore</IonLabel>
                </IonTabButton>
            </IonTabBar>
        </IonTabs>
    </IonPage>
);
Run Code Online (Sandbox Code Playgroud)

MyDecks.tsx:

const MyDecks: React.FunctionComponent<RouteComponentProps> = (props: RouteComponentProps) => {
    return <>
            <IonHeader>
                <IonToolbar>
                    <IonTitle>My Decks</IonTitle>
                </IonToolbar>
            </IonHeader>

            <IonContent className='ion-padding'>
                My Decks
            </IonContent>
    </>
};
Run Code Online (Sandbox Code Playgroud)

目前的行为是:

  1. 用户访问 /
  2. 用户被重定向到 /home
  3. 另一个重定向到 /myDeck,选择了“My Deck”选项卡并且 URL 很好。
  4. 如果用户点击“探索”选项卡,URL 会发生变化,“我的甲板”选项卡被取消选择,而“探索”选项卡被选中,但是页面内容不会改变。

如果我改变里面的路线顺序<IonRouterOutlet>,那么最初选择了“我的甲板”选项卡,当用户第一次单击“探索”选项卡时,它呈现正常,但永远不会回到“我的甲板”选项卡。

我还注意到在 /myDeck 或 /explore 刷新时根本没有内容呈现。

Rob*_*ert 7

根据 React Tabs starter 模板,您必须嵌套 的IonRouterOutlet内部IonTabs,它嵌套在IonReactRouter.

这是他们的 App.tsx 的样子:

  <IonApp>
    <IonReactRouter>
      <IonTabs>
        <IonRouterOutlet>
          <Route path="/tab1" component={Tab1} exact={true} />
          <Route path="/tab2" component={Tab2} exact={true} />
          <Route path="/tab3" component={Tab3} />
          <Route path="/" render={() => <Redirect to="/tab1" />} exact={true} />
        </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>
    </IonReactRouter>
  </IonApp>
Run Code Online (Sandbox Code Playgroud)

对我来说,它是那样工作的。无论如何,Ionic+React 文档对此类内容并不是很详细。一个人还是要搜索很多。