react+dva+antd+umi項(xiàng)目建立操作流程及知識(shí)點(diǎn)總結(jié)

0.1 引用

0.1.1 react官網(wǎng)

0.1.2?dva官網(wǎng)

0.1.3?antd-mobile官網(wǎng)

0.1.4?umijs官網(wǎng)

0.1.5?轉(zhuǎn)載文章-umi操作手冊(cè)

一、what are these?

1.1 react.js

React 是一個(gè)聲明式,高效且靈活的用于構(gòu)建用戶界面的 JavaScript 庫(kù)。使用 React 可以將一些簡(jiǎn)短、獨(dú)立的代碼片段組合成復(fù)雜的 UI 界面,這些代碼片段被稱作“組件”。

1.2 dva

dva 首先是一個(gè)基于?redux?和?redux-saga?的數(shù)據(jù)流方案,然后為了簡(jiǎn)化開(kāi)發(fā)體驗(yàn),dva 還額外內(nèi)置了?react-router?和?fetch,所以也可以理解為一個(gè)輕量級(jí)的應(yīng)用框架。

特性

易學(xué)易用,僅有 6 個(gè) api,對(duì) redux 用戶尤其友好,配合 umi 使用后更是降低為 0 API

elm 概念,通過(guò) reducers, effects 和 subscriptions 組織 model

插件機(jī)制,比如?dva-loading?可以自動(dòng)處理 loading 狀態(tài),不用一遍遍地寫(xiě) showLoading 和 hideLoading

支持 HMR,基于?babel-plugin-dva-hmr?實(shí)現(xiàn) components、routes 和 models 的 HMR

1.3 Ant Design Mobile

一個(gè)基于 Preact / React / React Native 的 UI 組件庫(kù)

1.4 umi

umi是一個(gè)基于路由的框架,它支持類似于next.js的常規(guī)路由和各種高級(jí)路由功能,例如路由級(jí)按需加載。借助涵蓋從源代碼到構(gòu)建產(chǎn)品的每個(gè)生命周期的完整插件系統(tǒng),umi能夠支持各種功能擴(kuò)展和業(yè)務(wù)需求。目前,umi在社區(qū)和公司內(nèi)部都有近50多個(gè)插件。

umi是Ant Financial的基本前端框架,已直接或間接為600多個(gè)應(yīng)用程序提供服務(wù),包括Java,節(jié)點(diǎn),移動(dòng)應(yīng)用程序,混合應(yīng)用程序,純前端資產(chǎn)應(yīng)用程序,CMS應(yīng)用程序等。umi為我們的內(nèi)部用戶提供了很好的服務(wù),我們希望它也可以為外部用戶提供很好的服務(wù)。

功能

???開(kāi)箱即用,具有對(duì)react,react-router等的內(nèi)置支持。

??Next.js?之類的功能齊全的路由約定,并且還支持配置的路由

???完整的插件系統(tǒng),涵蓋從源代碼到生產(chǎn)的每個(gè)生命周期

performance?高性能,通過(guò)插件支持PWA,路由級(jí)代碼拆分等

for?支持靜態(tài)導(dǎo)出,適應(yīng)各種環(huán)境,例如控制臺(tái)應(yīng)用程序,移動(dòng)應(yīng)用程序,egg,支付寶錢(qián)包等

???快速開(kāi)發(fā)的啟動(dòng),支持支持DLL與配置

???與IE9兼容,基于UMI-插件,polyfills

???支持TypeScript,包括d.ts定義和umi test

???與深度集成DVA,支持鴨子目錄,模型的自動(dòng)加載,代碼分裂等

單純的react.js或dva創(chuàng)建項(xiàng)目流程


二、項(xiàng)目創(chuàng)建流程(umi)

(項(xiàng)目使用umi創(chuàng)建 直接看到2.4即可 其余為記錄獨(dú)立創(chuàng)建方式)

2.1 react

全局安裝:

$ npm install -g?create-react-app

定位到工作目錄下,創(chuàng)建項(xiàng)目:

$ create-react-app projectName

2.2 dva

安裝dva-cli

$ npm install dva-cli -g

新建項(xiàng)目:

$ dva new projectName

cd進(jìn)入項(xiàng)目目錄后啟動(dòng)項(xiàng)目

$ npm start

2.3 基于react引入antd

按需加載

$ npm install react-app-rewired customize-cra --save-dev

2.4 umi

全局安裝umi

$ yarn global add umi

首先,yarn create umi在新目錄中使用。

$ mkdir myapp && cd myapp

$ yarn create umi

選擇project。

確認(rèn)是否要使用TypeScript。

? Do you want to use typescript?(y/N)

然后,選擇所需的功能,并檢出plugin / umi-plugin-react以獲得詳細(xì)說(shuō)明。

這里選擇antd+dva+dll

然后手動(dòng)安裝依賴項(xiàng),

$ yarn

最后,使用啟動(dòng)本地開(kāi)發(fā)服務(wù)器yarn start。

$ yarn start

三、umi項(xiàng)目架構(gòu)與tips

3.1項(xiàng)目架構(gòu)

umi項(xiàng)目架構(gòu)

3.2 umi路由約定

3.2.1 基礎(chǔ)路由

約定 pages 下所有的?js、jsx、ts?和?tsx?文件即路由,umi 會(huì)自動(dòng)生成路由。

3.2.2 動(dòng)態(tài)路由

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

3.2.3 可選的動(dòng)態(tài)路由

umi 里約定動(dòng)態(tài)路由如果帶?$?后綴,則為可選動(dòng)態(tài)路由。

3.2.4 嵌套路由

umi 里約定目錄下有?_layout.js?時(shí)會(huì)生成嵌套路由,以?_layout.js?為該目錄的 layout 。

3.2.5 404 路由

約定?pages/404.js?為 404 頁(yè)面,需返回 React 組件。

3.3?UMI通用母版頁(yè)約定

3.3.1 全局 layout

約定?src/layouts/index.js?為全局路由,返回一個(gè) React 組件,通過(guò)?props.children?渲染子組件。

export default function(props) {

return(

? ? <>

? ? ? <Header />

? ? ? { props.children }

? ? ? <Footer />

? ? </>

? );

}

3.3.2 不同的全局 layout

你可能需要針對(duì)不同路由輸出不同的全局 layout,umi 不支持這樣的配置,但你仍可以在?layouts/index.js?對(duì) location.path 做區(qū)分,渲染不同的 layout 。

比如想要針對(duì) /login 輸出簡(jiǎn)單布局

export default function(props) {

if(props.location.pathname ==='/login') {

return{ props.children }

? }

return(

? ? <>

? ? ? <Header />

? ? ? { props.children }

? ? ? <Footer />

? ? </>

? );

}

3.4?UMI-dva-model約定

model 分兩類,一是全局 model,二是頁(yè)面 model。全局 model 存于?/src/models/?目錄,所有頁(yè)面都可引用;頁(yè)面 model 不能被其他頁(yè)面所引用

規(guī)則如下:

src/models/**/*.js?為 global model

src/pages/**/models/**/*.js?為 page model

global model 全量載入,page model 在 production 時(shí)按需載入,在 development 時(shí)全量載入

page model 會(huì)向上查找,比如 page js 為?pages/a/b.js,他的 page model 為?pages/a/b/models/**/*.js?+?pages/a/models/**/*.js,依次類推

約定 model.js 為單文件 model,解決只有一個(gè) model 時(shí)不需要建 models 目錄的問(wèn)題,有 model.js 則不去找?models/**/*.js

3.5?UMI操作相關(guān)

3.5.1 頁(yè)面跳轉(zhuǎn)

// 聲明式

import Link from 'umi/link';

export default () => (

? ? ? <Link to="/list">Go to list page</Link>

);

// 命令式

import router from 'umi/router';

function goToListPage() {

? ? ? router.push('/list');

}

3.5.2? 端口配置 .env文件

BROWSER=none

ESLINT=1

PORT=8001

3.6 Tips

src/global.css?此文件不走 css modules,且會(huì)自動(dòng)被引入,可以在這里寫(xiě)全局樣式,以及做樣式覆蓋。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,431評(píng)論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,637評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 178,555評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,900評(píng)論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,629評(píng)論 6 412
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,976評(píng)論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,976評(píng)論 3 448
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 43,139評(píng)論 0 290
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,686評(píng)論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,411評(píng)論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,641評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,129評(píng)論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,820評(píng)論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 35,233評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 36,567評(píng)論 1 295
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,362評(píng)論 3 400
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,604評(píng)論 2 380

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