如何在 React Router 6 中使用带有 useRoutes 的索引路由

Posted

技术标签:

【中文标题】如何在 React Router 6 中使用带有 useRoutes 的索引路由【英文标题】:how to use an index route with useRoutes in React Router 6 【发布时间】:2022-01-21 09:21:47 【问题描述】:
<Route path="/exercises" element=<Layout />>
  <Route index element=<List /> />
  <Route path=":id" element=<Exercise /> />
</Route>

如何将其重写为 useRoutes() 的 JS 对象,包括索引路由?


    path: "/exercises",
    element: <Layout />,
    children : [
      index? , element: <List />,
      path: ":id", element: <Exercise /> 
 ] 

我不确定如何处理索引...

【问题讨论】:

【参考方案1】:

useRoutes 钩子接受 RouteObject objects 的数组

/**
 * A route object represents a logical route, with (optionally) its child
 * routes organized in a tree-like structure.
 */
export interface RouteObject 
  caseSensitive?: boolean;
  children?: RouteObject[];
  element?: React.ReactNode;
  index?: boolean;
  path?: string;

您应该能够使用index 属性指定什么是索引路由。


  path: "/exercises",
  element: <Layout />,
  children: [
     index: true, element: <List /> ,
     path: ":id", element: <Exercise /> 
  ],

【讨论】:

【参考方案2】:

这似乎有效:


    path: "/exercises",
    element: <Layout />,
    children : [
      path: "" , element: <List />,
      path: ":id", element: <Exercise /> 
 ] 

当路径为 /exercises 时,Layout 会在 Outlet 中渲染,List 会在 Layout 中渲染。当路径为 /exercises/4 时(例如),Exercise 组件在 Layout 中的 Outlet 中呈现。

【讨论】:

以上是关于如何在 React Router 6 中使用带有 useRoutes 的索引路由的主要内容,如果未能解决你的问题,请参考以下文章

在带有 react-router 的 React 中,当我从一个复杂的视图中导航出来,然后直接返回时,如何保留一个人的所有视图选择?

使用带有输入的 react-router-dom

在带有 webpack 的 React-Router 中使用嵌套路由的问题

如何在 react-router-dom v6 中返回上一条路线

使用react-router-dom@6,如何完成路由守卫这样的功能——使用高阶组件的包裹。

使用react-router-dom@6,如何完成路由守卫这样的功能——使用高阶组件的包裹。