react umi+dva開發(fā)基本流程(1)

首先簡單認識一下:官網(wǎng)地址:https://umijs.org/zh/guide/ umi,中文可發(fā)音為烏米,是一個可插拔的企業(yè)級 react 應用框架。umi 以路由為基礎的,支持類 next.js 的約定式路由,以及各種進階的路由功能,并以此進行功能擴展,比如支持路由級的按需加載。然后配以完善的插件體系,覆蓋從源碼到構建產物的每個生命周期,支持各種功能擴展和業(yè)務需求,目前內外部加起來已有 50+ 的插件。

umi 是螞蟻金服的底層前端框架,已直接或間接地服務了 600+ 應用,包括 java、node、H5 無線、離線(Hybrid)應用、純前端 assets 應用、CMS 應用等。他已經很好地服務了我們的內部用戶,同時希望他也能服務好外部用戶。

使用umi搭建項目基本目錄結構如下:

├── dist/? ? ? ? ? ? ? ? ? ? ? ? ? // 默認的 build 輸出目錄

├── mock/? ? ? ? ? ? ? ? ? ? ? ? ? // mock 文件所在目錄,基于 express

├── config/

? ? ├── config.js? ? ? ? ? ? ? ? ? // umi 配置,同 .umirc.js,二選一

└── src/? ? ? ? ? ? ? ? ? ? ? ? ? // 源碼目錄,可選

? ? ├── layouts/index.js? ? ? ? ? // 全局布局

? ? ├── pages/? ? ? ? ? ? ? ? ? ? // 頁面目錄,里面的文件即路由

? ? ? ? ├── .umi/? ? ? ? ? ? ? ? ? // dev 臨時目錄,需添加到 .gitignore

? ? ? ? ├── .umi-production/? ? ? // build 臨時目錄,會自動刪除

? ? ? ? ├── document.ejs? ? ? ? ? // HTML 模板

? ? ? ? ├── 404.js? ? ? ? ? ? ? ? // 404 頁面

? ? ? ? ├── page1.js? ? ? ? ? ? ? // 頁面 1,任意命名,導出 react 組件

? ? ? ? ├── page1.test.js? ? ? ? ? // 用例文件,umi test 會匹配所有 .test.js 和 .e2e.js 結尾的文件

? ? ? ? └── page2.js? ? ? ? ? ? ? // 頁面 2,任意命名

? ? ├── global.css? ? ? ? ? ? ? ? // 約定的全局樣式文件,自動引入,也可以用 global.less

? ? ├── global.js? ? ? ? ? ? ? ? ? // 可以在這里加入 polyfill

? ? ├── app.js? ? ? ? ? ? ? ? ? ? // 運行時配置文件

├── .umirc.js? ? ? ? ? ? ? ? ? ? ? // umi 配置,同 config/config.js,二選一

├── .env? ? ? ? ? ? ? ? ? ? ? ? ? // 環(huán)境變量

└── package.json

使用步驟如下:

全局安裝環(huán)境

npm install -g umi

構建項目? & 創(chuàng)建src目錄

mkdir? project &&? cd project? &&? mkdir src &&? cd src

創(chuàng)建頁面/路由組件

umi g page index? //自動生成pages目錄,以及index.js index.css

運行項目

umi dev? ? //打開localhost:8000? 會看到index.js內的組件內容

構建生產環(huán)境

umi build

這些就是umi基本的頁面構建以及項目啟動。

pages中的js組件并列,文件名字便是路由路徑。

umi中可以通過導航標簽來進行路由切換

import Link from 'umi/link';<Link to="/list">list</Link>

路由傳參-3種形式(params,query,state)

state <Link to={{pathname:'/list',state:{id:'hello'}}}>list</Link>

query <Link to={{pathname:'/list',query:{id:'hello'}}}>list</Link>

params <Link to={'/list/111'}>list</Link>

接收參數(shù)

state {props.location.state.id}

query {props.location.query.id}

params

首先講list組件放在list目錄下,list.js更名為$id.js,id為保存params傳參的變量

使用? {props.match.params.id}

同時嵌套路由需要構建_layout.js。

需要展示子組件的容器通過 {props.children}

HTML模版定義-定義title,meta等設置,構建document.ejs

<!DOCTYPE html><html><head>? ? <meta charset="utf8" version='1'/>? ? <title>京東(JD.COM)-正品低價、品質保障、配送及時、輕松購物!</title>? ? <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=yes"/>? ? <meta name="description"? ? ? ? ? content="京東JD.COM-專業(yè)的綜合網(wǎng)上購物商城,銷售家電、數(shù)碼通訊、電腦、家居百貨、服裝服飾、母嬰、圖書、食品等數(shù)萬個品牌優(yōu)質商品.便捷、誠信的服務,為您提供愉悅的網(wǎng)上購物體驗!"/>? ? <meta name="Keywords" content="網(wǎng)上購物,網(wǎng)上商城,手機,筆記本,電腦,MP3,CD,VCD,DV,相機,數(shù)碼,配件,手表,存儲卡,京東"/></head><body> <div id="root"></div></body></html>

全局公共css編寫-構建global.css? 無需引入,所有pages組件通用樣式。

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容