React 导航
本指南介绍在使用 Ionic 和 React 构建的应用中路由是如何工作的。
IonReactRouter 在底层使用了流行的 React Router 库。使用 Ionic 和 React Router,你可以创建具有丰富页面过渡效果的多页面应用。
你对 React Router 路由的了解都可以直接应用到 Ionic React 中。让我们来看一下 Ionic React 应用的基础知识以及路由如何与之配合工作。
Ionic React 中的路由
以下是一个示例 App 组件,它定义了一个指向 "/dashboard" URL 的路由。当你访问 "/dashboard" 时,路由会渲染 DashboardPage 组件。
App.tsx
const App: React.FC = () => (
<IonApp>
<IonReactRouter>
<IonRouterOutlet>
<Route path="/dashboard" component={DashboardPage} />
<Redirect exact from="/" to="/dashboard" />
</IonRouterOutlet>
</IonReactRouter>
</IonApp>
);
在 Route 之后,我们定义了默认的 Redirect,当用户访问应用的根 URL("/")时,会将其重定向到 "/dashboard" URL。
重定向还设置了 exact prop,这意味着 URL 必须与 from prop(如果 Route 上使用了 exact 则是 path prop)完全匹配。如果没有它,此重定向将为每个路由渲染,因为每个路由都以 "/" 开头。
你也可以根据条件(例如检查用户是否已认证)从 Route 的 render 方法中以编程方式进行重定向:
<Route
exact
path="/dashboard"
render={(props) => {
return isAuthed ? <DashboardPage {...props} /> : <LoginPage />;
}}
/>
IonReactRouter
IonReactRouter 组件包装了 React Router 中的传统 BrowserRouter 组件,并为应用设置路由。因此,请使用 IonReactRouter 替代 BrowserRouter。你可以向 IonReactRouter 传递任何 props,它们将被传递到底层的 BrowserRouter。
嵌套路由
在 Dashboard 页面内部,我们定义更多与应用的这一特定部分相关的路由:
DashboardPage.tsx
const DashboardPage: React.FC = () => {
return (
<IonPage>
<IonRouterOutlet>
<Route exact path="/dashboard" component={UsersListPage} />
<Route path="/dashboard/users/:id" component={UserDetailPage} />
</IonRouterOutlet>
</IonPage>
);
};