[react]初識Umi.JS

什么是Umi.js?

umi借帘,中文可發(fā)音為烏米剑按,是一個可插拔的企業(yè)級 react 應(yīng)用框架。你可以將它簡單的理解為一個專注性能的類 next.js 前端框架澜驮,并通過約定陷揪、自動生成和解析代碼等方式來輔助開發(fā),減少我們開發(fā)者的代碼量杂穷。

為什么使用Umi.js?

我們做react開發(fā)的時候會不會遇到以下問題悍缠?:
1.項目做大的時候,開發(fā)調(diào)試的啟動和熱更新時間會變得很長耐量。
2.大應(yīng)用下飞蚓,網(wǎng)站打開很慢,有沒有辦法基于路由做到按需加載廊蜒。
3.dva的model每次都要手寫載入趴拧,能否一開始就同項目初始化好?

使用烏米山叮,即可解決以上問題著榴,并且還能提供如下優(yōu)勢:

  • 開箱即用,內(nèi)置 react屁倔、react-router 等
  • 類 next.js 且功能完備的路由約定脑又,同時支持配置的路由方式
  • 完善的插件體系,覆蓋從源碼到構(gòu)建產(chǎn)物的每個生命周期
  • 一鍵兼容到 IE9
  • 完善的 TypeScript 支持
  • 與 dva 數(shù)據(jù)流的深入融合

起步Umi

node環(huán)境安裝

官網(wǎng)下載與系統(tǒng)相應(yīng)的node版本锐借,node.js版本>=8.10

安裝Umi

npm install -g umi

推薦使用 yarn 代替 npm 來安裝 umi 问麸, yarn 會針對部分場景做一些緩存以節(jié)省時間,你可以輸入以下命令來全局安裝 yarn钞翔,使用yarn后項目中盡量避免再使用npm严卖,不然可能會發(fā)生意想不到的錯誤。

# 使用yarn安裝umi
yarn global add umi

Umi快速上手

先找個地方建個空目錄myapp

# 新建應(yīng)用
$ mkdir myapp && cd myapp

# 新建頁面
$ umi generate page index

# 本地開發(fā)
$ umi dev

# 構(gòu)建上線
$ umi build

項目工程結(jié)構(gòu)

這里我搭建了一個demo工程布轿,并列了下工程下的文件功能描述妄田。

public                  // 公共文件 可以放一些第三方字體 樣式庫等
mock                    // mock文件
src
  |-- components        // 公共組件目錄 當業(yè)務(wù)需要拆分組件的時候,可以在對應(yīng)的業(yè)務(wù)文件夾下單獨創(chuàng)建一個components文件夾
  |-- layouts           // 項目結(jié)構(gòu)文件
  |-- locales           // 規(guī)劃文件
  |-- models            // 公共model存放位置
    |-- public.js       // 公共model文件 可以多個
  |-- services          // 公共api存放
  |-- pages             // 容器組件
    |-- demo-umi            // 業(yè)務(wù)容器 相對路由/demo ***不可以有任何大寫字母
      |-- index.js      // 業(yè)務(wù)入口 入口文件只識別index.js 后綴必須是js
      |-- index.less    // 業(yè)務(wù)樣式
      |-- modules       // 業(yè)務(wù)model目錄
        |-- demo-m.js     // 業(yè)務(wù)model文件 可以有多個 自動加載
      |-- service       // 業(yè)務(wù)api目錄
        |-- demo-s.js     // 業(yè)務(wù)api文件 可以有多個
  |-- utils             // 工具
  |-- theme             
    |-- cofnig.js       // 覆蓋antd樣式文件
    |-- vars.less       // 全局變量
  |-- global.less       // 公共樣式 覆蓋樣式
.eslintignore           // eslint過濾文件清單
.eslintrc.js            // eslint配置
.gitignore
package.json  
README.md 

約定式路由

啟動 umi dev 后驮捍,大家會發(fā)現(xiàn) pages 下多了個 .umi 的目錄請不要直接在這里修改代碼,umi 重啟或者 pages 下的文件修改都會重新生成這個文件夾下的文件脚曾,約定 pages 下所有的 (j|t)sx? 文件即路由

使用dva

在 umi 項目中东且,你可以使用 dva 來處理數(shù)據(jù)流,以響應(yīng)一些復(fù)雜的交互操作本讥。
在 umi@^2 中要使用 dva 的功能很簡單珊泳,只要使用 umi-plugin-react 插件并配置 dva:true 即可鲁冯。
修改配置的文件:./umirc.js

// ref: https://umijs.org/config/
export default {
  plugins: [
    // ref: https://umijs.org/plugin/umi-plugin-react.html
    ['umi-plugin-react', {
      antd: true,
      dva: true, // 在此處啟用 dva
      dynamicImport: false,
      title: 'hero',
      dll: false,
      routes: {
        exclude: [],
      },
      hardSource: false,
    }],
  ],
}

在dva中,處理數(shù)據(jù)流的文件統(tǒng)一放在 models 文件夾下色查,每一個文件默認導出一個對象薯演,里面包含數(shù)據(jù)和處理數(shù)據(jù)的方法,通常我們稱之為 model 秧了。如以下count.js跨扮,model結(jié)構(gòu)一般是如此:

./src/models/count.js
export default {
  namespace: 'count', // 默認與文件名相同
  state: 'count',
  subscriptions: {
    setup({ dispatch, history }) {
    },
  },
  reducers: {
    update(state) {
      return `${state}_count`;
    },
  },
  effects: {
    *fetch({ type, payload }, { put, call, select }) {
    },
  },
}

關(guān)于reducers,effects,subscriptions的詳細介紹,可參考dva.js官方文檔
Dva.js验毡。

在項目頁面中使用model

我們需要導入connect將頁面和model綁定在一起衡创。

import { connect } from 'dva';  
function CountPage(props) {  
 //從props屬性中打印namespace為count的model的state數(shù)據(jù)       
  console.log(props.count);      
  return (
    <div className={styles.normal}>
      <h1>數(shù)量大小</h1>
      <h2>This is {props.count}</h2>
    </div>
  );
}
export default connect(({ count }) => ({ count }))(CountPage);  

如果使用es7的裝飾器,我們可以改成這樣的寫法:

import { connect } from 'dva'; 
// 裝飾器 
@connect(({ count }) => ({ count }))
function CountPage(props) {  
 //從props屬性中打印namespace為count的model的state數(shù)據(jù)       
  console.log(props.count);      
  return (
    <div className={styles.normal}>
      <h1>數(shù)量大小</h1>
      <h2>This is {props.count}</h2>
    </div>
  );
}
export default CountPage;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末晶通,一起剝皮案震驚了整個濱河市璃氢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌狮辽,老刑警劉巖一也,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異喉脖,居然都是意外死亡椰苟,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門动看,熙熙樓的掌柜王于貴愁眉苦臉地迎上來尊剔,“玉大人,你說我怎么就攤上這事菱皆⌒胛螅” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵仇轻,是天一觀的道長京痢。 經(jīng)常有香客問我,道長篷店,這世上最難降的妖魔是什么祭椰? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮疲陕,結(jié)果婚禮上方淤,老公的妹妹穿的比我還像新娘。我一直安慰自己蹄殃,他們只是感情好携茂,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著诅岩,像睡著了一般讳苦。 火紅的嫁衣襯著肌膚如雪带膜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天鸳谜,我揣著相機與錄音膝藕,去河邊找鬼。 笑死咐扭,一個胖子當著我的面吹牛芭挽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播草描,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼览绿,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了穗慕?” 一聲冷哼從身側(cè)響起饿敲,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎逛绵,沒想到半個月后怀各,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡术浪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年瓢对,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胰苏。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡硕蛹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出硕并,到底是詐尸還是另有隱情法焰,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布倔毙,位于F島的核電站埃仪,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏陕赃。R本人自食惡果不足惜卵蛉,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望么库。 院中可真熱鬧傻丝,春花似錦、人聲如沸诉儒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至运准,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間缭受,已是汗流浹背胁澳。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留米者,地道東北人韭畸。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像蔓搞,于是被迫代替她去往敵國和親胰丁。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容

  • 介紹 最近開發(fā)了一個react項目喂分,因為之前都是做原生混合H5開發(fā)锦庸,對redux用的不怎么熟練,這次想要鍛煉下然后...
    Jadeite2閱讀 29,266評論 31 57
  • 1.1 前端開發(fā)的演變 靜態(tài)頁面階段:后端 MVC模式蒲祈,前端即V AJAX 階段:實現(xiàn)了(獲取數(shù)據(jù) => 處理數(shù)據(jù)...
    Leanisme閱讀 3,414評論 0 0
  • dva.js 簡介 dva 是阿里前端架構(gòu)師 sorrycc 帶 team 研發(fā)的一套輕量級前端框架甘萧,其目的是盡量...
    那顆星_fcaf閱讀 3,664評論 0 24
  • ——所謂孝心扬卷,不過是反饋的一種方式而已 對不起,有幾天沒更新連載酸钦、延續(xù)我的《那時花開》了怪得。那是因為,我公公生病了卑硫,...
    汀雪日記閱讀 463評論 0 0
  • 我不敢說徒恋,我在寫作。因為毫無章法拔恰,想到什么寫什么因谎,想怎么寫就怎么寫。也沒研究過颜懊,到底什么是寫作财岔,怎樣算寫作,怎樣去...
    山間一清泉閱讀 216評論 2 4