返回

从小白到熟手,Umi.js动态添加路由渲染菜单栏全攻略

前端

Umi.js 中的动态路由和菜单栏渲染

动态路由的添加

Umi.js 提供了轻松添加动态路由的能力,可通过在 src/routes 目录下创建路由文件来实现。每个路由文件包含有关路径、组件和权限的信息。

例如,要创建到仪表盘的路由,可以在 src/routes/Dashboard.js 中定义:

export default {
  path: '/dashboard',
  component: () => import('./Dashboard'),
  access: 'canViewDashboard',
};

在 App.js 中添加动态路由

下一步,需要在 src/App.js 中添加动态路由逻辑。这可以通过使用 useModel 钩子函数来实现:

import { useModel } from 'umi';

const App = () => {
  const { routes } = useModel('@@router');

  return (
    <Router routes={routes} />
  );
};

export default App;

渲染菜单栏

要将动态添加的路由显示在菜单栏中,需要在 src/layouts 目录下创建布局文件,例如 src/layouts/BasicLayout.js

import { Menu, Icon } from 'antd';
import { useModel } from 'umi';

const BasicLayout = (props) => {
  const { routes } = useModel('@@router');

  const renderMenus = (routes) => {
    return routes.map((route) => {
      return (
        <Menu.Item key={route.path}>
          <Icon type={route.icon} />
          <span>{route.name}</span>
        </Menu.Item>
      );
    });
  };

  return (
    <Layout>
      <Sider>
        <Menu theme="dark" mode="inline">
          {renderMenus(routes)}
        </Menu>
      </Sider>
      <Content>{props.children}</Content>
    </Layout>
  );
};

export default BasicLayout;

在 index.js 中指定布局

最后,在 src/index.js 中指定应用程序的布局:

import { createRoot } from 'react-dom';
import BasicLayout from './layouts/BasicLayout';

createRoot(document.getElementById('root')).render(
  <Router routes={routes} fallback={BasicLayout} />
);

总结

通过遵循这些步骤,你将能够在 Umi.js 中实现动态添加路由并渲染菜单栏。这将使你能够构建功能强大且复杂的单页应用程序。

常见问题解答

  1. 如何获取动态路由的数据?
    答:可以在组件中使用 useParams 钩子函数来获取动态路由参数。

  2. 如何限制对动态路由的访问?
    答:可以在路由配置中指定 access 属性来控制对路由的访问。

  3. 如何添加嵌套路由?
    答:可以在路由文件中指定 children 属性来创建嵌套路由。

  4. 如何设置菜单栏的默认选中的路由?
    答:可以在 router.config.js 文件中设置 default 属性来指定默认选中的路由。

  5. 如何动态更改菜单栏?
    答:可以使用 useModel 钩子函数来动态更新菜单栏中的路由。