探索React Router:实现动态二级路由

在这里插入图片描述

我有一个路由配置的二维数组,想根据这个数组结合路由组件来动态生成路由,应该怎么样实现。在 React Router 6 中渲染二级路由的方式跟 React Router 65相比有一些变化,但核心思路仍然是利用 Route 组件和路由嵌套的方式。下面是具体的步骤:

  1. 定义路由数组
const routes = [
  {
    path: '/',
    element: <Home />
  },
  {
    path: '/about',
    element: <About />
  },
  {
    path: '/products',
    element: <Products />,
    children: [
      {
        path: 'list',
        element: <ProductList />
      },
      {
        path: 'details/:id',
        element: <ProductDetails />
      }
    ]
  }
]

注意,这里我们使用 element 属性代替了之前版本中的 component 属性。

  1. App.js 中使用 RoutesRoute 组件渲染路由
import { BrowserRouter, Routes, Route } from 'react-router-dom';

function App() {
  return (
    <BrowserRouter>
      <Routes>
        {routes.map((route, index) => (
          <Route
            key={index}
            path={route.path}
            element={<route.element />}
          >
            {route.children && route.children.map((child, idx) => (
              <Route
                key={idx}
                path={`${route.path}/${child.path}`}
                element={<child.element />}
              />
            ))}
          </Route>
        ))}
      </Routes>
    </BrowserRouter>
  );
}

在上面的代码中,我们使用 Routes 组件包裹所有的 Route 组件。对于每个路由对象,我们渲染一个 Route 组件,并将 pathelement 属性传入。如果该路由对象包含子路由,我们使用嵌套的 Route 组件来渲染子路由。

注意,在 React Router 6 中,我们需要使用字符串模板字面量语法 `${route.path}/${child.path}` 来拼接父路径和子路径。

  1. 在组件中渲染子路由
    对于需要渲染子路由的组件,例如 Products,我们可以使用 Outlet 组件作为子路由的占位符。
import { Outlet } from 'react-router-dom';

function Products() {
  return (
    <div>
      <h1>Products</h1>
      <Outlet />
    </div>
  );
}

Outlet 组件会根据当前的 URL 路径渲染与之匹配的子路由。

通过上述步骤,我们就可以在 React Router 6 中动态渲染二级路由了。如果有更深层次的嵌套路由,只需要在 children 数组中继续添加路由配置即可。

相关推荐

  1. Vue 实现动态

    2024-04-25 19:40:01       28 阅读
  2. vue3如何实现动态

    2024-04-25 19:40:01       44 阅读
  3. 实验五:动态配置

    2024-04-25 19:40:01       37 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-25 19:40:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-25 19:40:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-25 19:40:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-25 19:40:01       20 阅读

热门阅读

  1. el-table 表格自带全选按钮隐藏

    2024-04-25 19:40:01       12 阅读
  2. flask + celery + redis + flower

    2024-04-25 19:40:01       12 阅读
  3. C 语言实例 - 字符转 ASCII 码

    2024-04-25 19:40:01       12 阅读
  4. HashMap 和 HashTable的异同

    2024-04-25 19:40:01       11 阅读
  5. Linux c++ 中文字符转十六进制 UTF-8 编码

    2024-04-25 19:40:01       10 阅读
  6. 【React】生命周期

    2024-04-25 19:40:01       12 阅读
  7. 【vue】axios封装拦截

    2024-04-25 19:40:01       12 阅读
  8. Electron vue 进程间消息通行

    2024-04-25 19:40:01       14 阅读
  9. LeetCode-数组中最长的方波

    2024-04-25 19:40:01       14 阅读
  10. history命令

    2024-04-25 19:40:01       12 阅读