,

umi搭建React后端系统

安装 在普通的 Umi 应用中,默认 不附带任何插件 ,如需使用 Max 的功能(如 数据流、antd 等),…

安装

pnpm dlx create-umi@latest
npm start

在普通的 Umi 应用中,默认 不附带任何插件 ,如需使用 Max 的功能(如 数据流、antd 等),需要手动安装插件并开启他们:

pnpm add -D @umijs/plugins

如开启 antd 插件:

// .umirc.ts
export default {
  plugins: ['@umijs/plugins/dist/antd'],
  antd: {}
}

import React from 'react';
import { Button, Flex } from 'antd';
export default function Test() {
  return (
    <Flex gap="small" wrap>
        <Button type="primary">Primary Button</Button>
        <Button>Default Button</Button>
        <Button type="dashed">Dashed Button</Button>
        <Button type="text">Text Button</Button>
        <Button type="link">Link Button</Button>
    </Flex>
  );
}

umi中路由

1.umirc.ts定义

import { defineConfig } from "umi";
export default defineConfig({
  // routes: [
  //   { path: "/", component: "index" },
  //   { path: "/docs", component: "docs" },
  // ],
  npmClient: 'pnpm',
  utoopack: {},
});

2.自动生成

将routes注释掉,运行会默认生成.umi/core/route.tsx

Layout和跳转

跳转有Link和通过onClick的history方式

import { Link, Outlet } from 'umi';
import styles from './index.less';
import { Button } from 'antd';
import { history } from 'umi';
export default function Layout() {
  const goto = (path) =>{
    history.push(path);
  };

  return (
    <div className={styles.navs}>
      <Link to="/">Home</Link>
      <Link to="/dashboard">Dashboard</Link>
      <Link to="/user">User</Link>
      <Link to="/docs">Docs</Link>
      <Button type="primary" onClick={() => goto('/dashboard')}>ClickPrimary Button</Button>
      <Outlet />
    </div>
  );
}

别名定义

倒入path模块,添加alias属性

const {resolve} = require('path');  

alias: {
   api: resolve(__dirname, './src/services/'),
   components: resolve(__dirname, './src/components'),
   config: resolve(__dirname, './src/utils/config'),
   themes: resolve(__dirname, './src/themes'),
   utils: resolve(__dirname, './src/utils'),
}

layout选择

import { Link, Outlet } from 'umi';
import styles from './index.less';
import { selectLayout } from 'utils/selectLayout';
import BaseLayout from './BaseLayout';
import LoginLayout from './LoginLayout';
import { useLocation } from 'umi';
export default function Layout({ children }) {
  const location = useLocation();
  console.log(location,'location');
  const layoutMap = {
    BaseLayout,
    LoginLayout,
  }
  const Container = layoutMap[selectLayout(location.pathname)] || BaseLayout;
  console.log(Container,'Container');
  return (
    <Container>
      {children}
    </Container>
  );
}
export const selectLayout = (pathname) => {
  return pathname.includes('/users') ? 'LoginLayout' : 'BaseLayout';
}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

About the Author

每个人都有自己得时区,在自己得时区里,一切都是准时的。

BlockSpare — News, Magazine and Blog Addons for (Gutenberg) Block Editor