前端开发

umi学习笔记

2019-01-07  本文已影响0人  岩_424f

1.umi安装

详见这里:https://umijs.org/zh/guide/getting-started.html#%E7%8E%AF%E5%A2%83%E5%87%86%E5%A4%87

2.umi配置

在umi的配置中我们可以进行路由设置,插件设置等内容。

import path from 'path';
export default {
   alias: {
    '@': path.resolve(__dirname, 'src'),
  },
};

3.umi目录

下面是umi+dva的目录结构

.
├── dist/                          // 默认的 build 输出目录
├── mock/                          // mock 文件所在目录,基于 express
├── config/
    ├── config.js                  // umi 配置,同 .umirc.js,二选一
 |—— public                        //共享资源
└── src/                           // 源码目录,可选
    ├── assets                  // 静态资源
    ├── layouts/index.js           // 全局布局
    ├── models/global.js
    ├── pages/                     // 页面目录,里面的文件即路由
        ├── .umi/                  // dev 临时目录,需添加到 .gitignore
        ├── .umi-production/       // build 临时目录,会自动删除
        ├── a                      //按页面维度进行组织
            ├── index.js
            ├── models
                ├── a1.js
                ├── a2.js
            ├── services
                ├── a.js
        ├── b                      //按页面维度进行组织
            ├── index.js
            ├── model.js
            ├── service.js
        ├── 404.js                 // 404 页面  
    ├── global.css                 // 约定的全局样式文件,自动引入,也可以用 global.less
    ├── global.js                  // 可以在这里加入 polyfill
├── .umirc.js                      // umi 配置,同 config/config.js,二选一
├── .env                           // 环境变量
└── package.json

好处是更加结构更加清晰了,减少耦合,一删全删,方便 copy 和共享。

4.umi路由

umi有两种方式配置路由:

1.在umirc.js中手动配置路由
2.由umi自动生成路由配置

umi路由格式
1.基础路由

目录结构如下:

+ pages/
  + users/
    - index.js
    - list.js
  - index.js
routes:[
  { path: '/', component: './index.js' },
  { path: '/users/', component: './users/index.js' },
  { path: '/users/list', component: './users/list.js' },
]

component 是相对于 src/pages 目录的

2.动态路由

umi 里约定,带 $ 前缀的目录或文件为动态路由

目录结构

+ pages/
  + $post/
    - index.js
    - comments.js
  + users/
    $id.js
  - index.js
routes:[
    {path:'/',components:'/index.js'},
    {path:'/users/:id',components:'/users/$id.js'},
    {path:'/:post/,components:'/$post/index.js'},
    {path:'/:post/comments','/$post/comments.js},
]
3.嵌套路由

嵌套路由可以用来做布局页面。
目录结构如下:

+ pages/
  + users/
    - _layout.js
    - $id.js
    - index.js

以上_layout.js就是布局页面,嵌套路由的布局页面必须包含children,children即为要嵌套在布局页面中的内容。
以上_layout.js可以写成如下代码:

export default function(props) {
  return (
    <>
      <Header />
      { props.children }
      <Footer />
    </>
  );
}
routes:[
  { path: '/users': component: './users/_layout.js'
    routes: [
     { path: '/users/', component: './users/index.js' },
     { path: '/users/:id', component: './users/$id.js' },
   ],
  },
]
export default {
  history: 'hash',
  plugins: [
    ['umi-plugin-react', {
      antd: true,
      dva: true,
      routes: {
        exclude: [
          /model\.(j|t)sx?$/,
          /service\.(j|t)sx?$/,
          /models\//,
          /components\//,
          /services\//,
        ],
      },
    }],
  ],
};

按以上结构组织文件,umi会自动生成路由。

4.权限路由
[
  { path: '/', component: './pages/index.js' },
  { path: '/list', component: './pages/list.js', Routes: ['./routes/PrivateRoute.js'] },
]

Routes中的路径是相对与umirc.js的路径。

+ pages/
  - index.js

如果 pages/index.js 里包含:

/**
 * Routes:
 *    - ./src/routes/PrivateRoute.js
 */

则会生成:

[
  { path: '/', component: './index.js',
    title: 'Index Page',
    Routes: [ ' ./src/routes/PrivateRoute.js' ],
  },
]

Routes中的路径是相对与umirc.js的路径。

5.我理解的权限路由的几种实现方式

(1)通过嵌套路由实现
(2)通过权限路由实现

上一篇下一篇

猜你喜欢

热点阅读