umi學(xué)習(xí)筆記

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的配置中我們可以進(jìn)行路由設(shè)置,插件設(shè)置等內(nèi)容。

  • extraPostCSSPlugins 的配置
    定義額外的 PostCSS 插件,格式為數(shù)組。
    舉例:umi配置extraPostCSSPlugins詳解http://www.itdecent.cn/p/f1f6ce592388
  • alias的配置
    配置 webpack 的 resolve.alias 屬性。
    例如定義@表示/src
    修改.umirc.js文件
import path from 'path';
export default {
   alias: {
    '@': path.resolve(__dirname, 'src'),
  },
};

3.umi目錄

下面是umi+dva的目錄結(jié)構(gòu)

.
├── dist/                          // 默認(rèn)的 build 輸出目錄
├── mock/                          // mock 文件所在目錄,基于 express
├── config/
    ├── config.js                  // umi 配置,同 .umirc.js,二選一
 |—— public                        //共享資源
└── src/                           // 源碼目錄,可選
    ├── assets                  // 靜態(tài)資源
    ├── layouts/index.js           // 全局布局
    ├── models/global.js
    ├── pages/                     // 頁(yè)面目錄,里面的文件即路由
        ├── .umi/                  // dev 臨時(shí)目錄,需添加到 .gitignore
        ├── .umi-production/       // build 臨時(shí)目錄,會(huì)自動(dòng)刪除
        ├── a                      //按頁(yè)面維度進(jìn)行組織
            ├── index.js
            ├── models
                ├── a1.js
                ├── a2.js
            ├── services
                ├── a.js
        ├── b                      //按頁(yè)面維度進(jìn)行組織
            ├── index.js
            ├── model.js
            ├── service.js
        ├── 404.js                 // 404 頁(yè)面  
    ├── global.css                 // 約定的全局樣式文件,自動(dòng)引入,也可以用 global.less
    ├── global.js                  // 可以在這里加入 polyfill
├── .umirc.js                      // umi 配置,同 config/config.js,二選一
├── .env                           // 環(huán)境變量
└── package.json

好處是更加結(jié)構(gòu)更加清晰了,減少耦合,一刪全刪,方便 copy 和共享。

4.umi路由

umi有兩種方式配置路由:

1.在umirc.js中手動(dòng)配置路由
2.由umi自動(dòng)生成路由配置

umi路由格式
1.基礎(chǔ)路由

目錄結(jié)構(gòu)如下:

+ pages/
  + users/
    - index.js
    - list.js
  - index.js
  • 手動(dòng)配置
    在umirs.js中配置routes:[]:
routes:[
  { path: '/', component: './index.js' },
  { path: '/users/', component: './users/index.js' },
  { path: '/users/list', component: './users/list.js' },
]

component 是相對(duì)于 src/pages 目錄的

  • 自動(dòng)配置
    按以上結(jié)構(gòu)組織文件,umi會(huì)自動(dòng)生成路由。
2.動(dòng)態(tài)路由

umi 里約定,帶 $ 前綴的目錄或文件為動(dòng)態(tài)路由

目錄結(jié)構(gòu)

+ pages/
  + $post/
    - index.js
    - comments.js
  + users/
    $id.js
  - index.js
  • 手動(dòng)配置
routes:[
    {path:'/',components:'/index.js'},
    {path:'/users/:id',components:'/users/$id.js'},
    {path:'/:post/,components:'/$post/index.js'},
    {path:'/:post/comments','/$post/comments.js},
]
  • 自動(dòng)配置
    按以上結(jié)構(gòu)組織文件,umi會(huì)自動(dòng)生成路由。可以理解為$就是網(wǎng)址中的':'
3.嵌套路由

嵌套路由可以用來(lái)做布局頁(yè)面。
目錄結(jié)構(gòu)如下:

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

以上_layout.js就是布局頁(yè)面,嵌套路由的布局頁(yè)面必須包含children,children即為要嵌套在布局頁(yè)面中的內(nèi)容。
以上_layout.js可以寫成如下代碼:

export default function(props) {
  return (
    <>
      <Header />
      { props.children }
      <Footer />
    </>
  );
}
  • 手動(dòng)配置
    在umirs.js中配置routes:[]:
routes:[
  { path: '/users': component: './users/_layout.js'
    routes: [
     { path: '/users/', component: './users/index.js' },
     { path: '/users/:id', component: './users/$id.js' },
   ],
  },
]
  • 自動(dòng)配置
    自動(dòng)生成配置路由可以用以在umirc.js中設(shè)置需要排除的路由。
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\//,
        ],
      },
    }],
  ],
};

按以上結(jié)構(gòu)組織文件,umi會(huì)自動(dòng)生成路由。

4.權(quán)限路由
  • 手動(dòng)配置umirc.js的Routes來(lái)實(shí)現(xiàn)。
[
  { path: '/', component: './pages/index.js' },
  { path: '/list', component: './pages/list.js', Routes: ['./routes/PrivateRoute.js'] },
]

Routes中的路徑是相對(duì)與umirc.js的路徑。

  • 自動(dòng)配置權(quán)限路由
    通過(guò)注釋配置
    比如:
+ pages/
  - index.js

如果 pages/index.js 里包含:

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

則會(huì)生成:

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

Routes中的路徑是相對(duì)與umirc.js的路徑。

5.我理解的權(quán)限路由的幾種實(shí)現(xiàn)方式

(1)通過(guò)嵌套路由實(shí)現(xiàn)
(2)通過(guò)權(quán)限路由實(shí)現(xiàn)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容