成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

UMI.js使用方法

hearaway / 1701人閱讀

摘要:或者在中導(dǎo)入樣式文件存放全局通用請(qǐng)求存放通用方法這是時(shí)生產(chǎn)的臨時(shí)目錄,默認(rèn)包含和,有些插件也會(huì)在這里生成一些其他臨時(shí)文件。項(xiàng)目中常用于發(fā)送請(qǐng)求,等待服務(wù)端響應(yīng)數(shù)據(jù)。如果使用的裝飾器則為

umi.js使用方法 node環(huán)境安裝

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

編輯器

推薦使用Visual Studio Code 安裝方法

安裝umi
npm install -g umi
推薦使用 yarn 代替 npm 來(lái)安裝 umi , yarn 會(huì)針對(duì)部分場(chǎng)景做一些緩存以節(jié)省時(shí)間,你可以輸入以下命令來(lái)全局安裝 yarn,使用yarn后項(xiàng)目中盡量避免再使用npm,不然可能會(huì)發(fā)生意想不到的錯(cuò)誤。
npm install -g yarn

# 安裝完成后,使用命令查看是否安裝成功
yarn -v

# 使用yarn安裝umi
yarn global add umi

# 安裝完成后,使用命令查看是否安裝成功
umi -v
umi快速搭建項(xiàng)目

創(chuàng)建項(xiàng)目文件后使用終端工具打開(kāi)文件

推薦使用 yarn create 命令,能確保每次使用最新的腳手架。

yarn create umi / npm create umi
如果提示 create-umi 命令不存在,你需要執(zhí)行 yarn global bin,然后把 global bin 的路徑添加到環(huán)境變量 PATH 中。
選擇 project,選擇app項(xiàng)目回車鍵確認(rèn)
? Select the boilerplate type (Use arrow keys)
  ant-design-pro  - Create project with an layout-only ant-design-pro boilerplate, use together with umi block.
? app             - Create project with a simple boilerplate, support typescript.
  block           - Create a umi block.
  library         - Create a library with umi.
  plugin          - Create a umi plugin.
選擇是否使用 TypeScript,推薦使用TypeScript,輸入y后回車結(jié)束
? Do you want to use typescript? (y/N)
選擇你需要的功能

功能介紹詳見(jiàn) plugin/umi-plugin-react

? What functionality do you want to enable? (Press  to select,  to toggle all,  to invert selection)
?? antd
 ? dva
 ? code splitting
 ? dll
項(xiàng)目創(chuàng)建完成
啟動(dòng)項(xiàng)目
yarn start / npm run start
環(huán)境配置

在.env文件中可更改環(huán)境配置,一般不需要更改,常見(jiàn)更改例如

# 更改服務(wù)啟動(dòng)端口號(hào)
PORT=8001

# 關(guān)閉自動(dòng)打開(kāi)瀏覽器,默認(rèn)為打開(kāi)
BROWSER=none

詳細(xì)配置

config配置

編譯時(shí)的配置文件,.umirc.(js|ts) 和 config/config.(js|ts),二者選一,不可共存
推薦在主文件夾下創(chuàng)建config文件,使用config.js進(jìn)行項(xiàng)目配置(刪除自動(dòng)搭建項(xiàng)目時(shí)創(chuàng)建的.umirc.(js|ts))
詳細(xì)配置
config.local.js和config.production.js可在此配置開(kāi)發(fā)環(huán)境和線上環(huán)境不同的配置,在進(jìn)行打包時(shí)需修改package.json中腳本代碼

# 下載cross-env開(kāi)啟代碼分割功能
yarn add -D cross-env / npm install --save-dev cross-env 

# package.json中 "scripts"修改
"build": "cross-env UMI_ENV=production umi build"
typings.d.ts配置(使用typescript)

根據(jù)實(shí)際情況進(jìn)行后綴添加,否則ts會(huì)報(bào)導(dǎo)入錯(cuò)誤

declare module "*.png";
declare module "*.jpg";
declare module "*.less";
tslint.yml配置(使用typescript)

修改tslint規(guī)則,可根據(jù)個(gè)人使用情況修改,詳細(xì)配置可見(jiàn)tslint-react相關(guān)約定規(guī)則

# 推薦修改
rules:
  eofline: true
  no-console: true
  no-construct: true
  no-debugger: true
  no-reference: true
  no-trailing-whitespace: false
  jsx-no-multiline-js: false
  jsx-alignment: false
  jsx-no-lambda: false
(js|ts)config.json開(kāi)啟ES7裝飾器功能
"experimentalDecorators": true
文件詳解 mock文件

存放mock.js,默認(rèn)開(kāi)啟mock功能,可在.env文件中關(guān)閉: MOCK=none

src

所有與項(xiàng)目相關(guān)代碼存放在src文件之中

src/assets

存放靜態(tài)資源,例如圖片文件、字體文件等

src/components

存放全局通用組件

src/layouts

全局布局,如果該文件夾下有index.(js|tsx)會(huì)在所有路由外面嵌套一層路由
例如之前路由為

[
  { path: "/", component: "./pages/index" },
  { path: "/users", component: "./pages/users" },
]

嵌套之后為

[
  { path: "/", component: "./layouts/index", routes: [
    { path: "/", component: "./pages/index" },
    { path: "/users", component: "./pages/users" },
  ] }
]

可在index文件中進(jìn)行全局布局,或者根據(jù)pathname修改不同路由下的布局

src/models

全局models,如果有一個(gè)以上的頁(yè)面會(huì)使用相同namespace空間內(nèi)的代碼,請(qǐng)將models文件放在此處,不然兩個(gè)頁(yè)面之間做交互時(shí),
namespace中的代碼會(huì)產(chǎn)生影響

src/styles

存放通用樣式,如果想覆蓋全局樣式可在global.(css|less|sass|scss)進(jìn)行修改,此文件不走 css modules,且會(huì)自動(dòng)被引入。
或者在app.(js|ts)中導(dǎo)入樣式文件

src/services

存放全局通用請(qǐng)求

src/utils

存放通用方法

src/pages/.umi

這是 umi dev 時(shí)生產(chǎn)的臨時(shí)目錄,默認(rèn)包含 umi.js 和 router.js,有些插件也會(huì)在這里生成一些其他臨時(shí)文件??梢栽谶@里做一些驗(yàn)證,但請(qǐng)不要直接在這里修改代碼,umi 重啟或者 pages 下的文件修改都會(huì)重新生成這個(gè)文件夾下的文件。
該文件下的router.js可查看自動(dòng)生成的路由

src/pages/...

項(xiàng)目頁(yè)面文件,在不同文件中創(chuàng)建的components、models、services文件最好只在該頁(yè)面中使用,可使項(xiàng)目結(jié)構(gòu)變得更加清晰

tests

該文件為測(cè)試腳本文件,不會(huì)生成路由配置,如果需要使用mock測(cè)試,可以在外部mock文件中或者在該文件下創(chuàng)建__mock__文件

Dva.js使用需掌握的知識(shí)點(diǎn) Model

在 umi 項(xiàng)目中,你可以使用 dva 來(lái)處理數(shù)據(jù)流,以響應(yīng)一些復(fù)雜的交互操作。這些處理數(shù)據(jù)流的文件統(tǒng)一放在 models 文件夾下,每一個(gè)文件默認(rèn)導(dǎo)出一個(gè)對(duì)象,里面包含數(shù)據(jù)和處理數(shù)據(jù)的方法,通常我們稱之為 model 。一個(gè) model 文件的結(jié)構(gòu)一般是這樣的:

export default {
  namespace: "example", // 這個(gè) model 的名字,必須全局唯一,否則相同namespace的代碼會(huì)產(chǎn)生影響
  state: {
    count: 0,
  }, // 初始數(shù)據(jù)
  reducers: {
    save() { ... },
  }, // 用于修改數(shù)據(jù)
  effects: {
    *getData() { ... },
  }, // 用于獲取數(shù)據(jù)
  subscriptions: {
    setup() { ... },
  }, // 用于訂閱數(shù)據(jù)
}
Reducer

每一個(gè) reducer 都是一個(gè)普通函數(shù),接受 state 和 action 作為參數(shù),即:(state, action) => state ,你可以在函數(shù)中更改舊的 state,返回新的 state 。

reducers: {
  save(state, { payload }) {
    return ({ ...state, ...payload });
  },
},
Effect

每一個(gè) effect 都是一個(gè) 生成器函數(shù) ,你可以在這里獲取你需要的數(shù)據(jù),例如向服務(wù)器發(fā)起一個(gè)請(qǐng)求、或是獲取其他 model 里的 state 。為了明確分工,你無(wú)法在 effect 中直接修改 state ,但你可以通過(guò) put 方法 調(diào)用 reducer 來(lái)修改 state

state:{
  assets:{},
},
*changeAssets({ payload }, { call, put, select }) {
  const user = yield select(states => states.user);
  const assets = yield call(fetchData, user);
  yield put({ type: "save", payload: { assets } });
},
select

此方法用于獲取當(dāng)前或其他 model 的 state 。

const data = yield select(states => states[namespace]);
call

此方法用于執(zhí)行一個(gè)異步函數(shù),可以理解為等待這個(gè)函數(shù)執(zhí)行結(jié)束。項(xiàng)目中常用于發(fā)送 http 請(qǐng)求,等待服務(wù)端響應(yīng)數(shù)據(jù)。

const data = yield call(doSomethingFunc, parameter);
put

此方法用于觸發(fā)一個(gè) action,這個(gè) action 既可以是一個(gè) reducer 也可以是一個(gè) effect 。

yield put({ type: "reducerName", payload: { page } });
Subscription

subscription 用于訂閱一個(gè)數(shù)據(jù)源,根據(jù)需要使用 dispatch 觸發(fā)相應(yīng)的 action。數(shù)據(jù)源可以是當(dāng)前的時(shí)間、服務(wù)器的 websocket 連接、keyboard 輸入、geolocation 變化、history 路由變化等等。 項(xiàng)目中常用于頁(yè)面初始化數(shù)據(jù)的自動(dòng)請(qǐng)求,如:

subscriptions: {
  setup({ dispatch, history }) {
    return history.listen(({ pathname, query }) => {
      // 進(jìn)入 "/home" 路由,發(fā)起一個(gè)名叫 "query" 的 effect
      if (pathname === "/home") {
        dispatch({ type: "query" });
      }
    });
  },
},
dispatch

類似 effect 中的 put 方法,你可以在 subscription 的參數(shù)、或是一個(gè)已經(jīng) connect 過(guò)的組件的 props 中拿到。

connect

通過(guò)此方法在你的組件中獲取到指定 model 的 state 數(shù)據(jù)。

import { connect } from "dva";
function App({ user, dispatch }) {
  const handleClick = () => {
    dispatch({ type: "user/fetchUser" });
  };
  return (
    

Hello, {user}

); } export default connect(({ user }) => ({ user }))(App);

如果使用es7的裝飾器則為

import { connect } from "dva";

@connect(({ user }) => ({ user }))
function App({ user, dispatch }) {
  const handleClick = () => {
    dispatch({ type: "user/fetchUser" });
  };
  return (
    

Hello, {user}

); } export default App;

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/103545.html

相關(guān)文章

  • Umi.js

    摘要:,中文可發(fā)音為烏米,是一個(gè)可插拔的企業(yè)級(jí)應(yīng)用框架。以路由為基礎(chǔ)的,支持類的約定式路由,以及各種進(jìn)階的路由功能,并以此進(jìn)行功能擴(kuò)展,比如支持路由級(jí)的按需加載。全局存于目錄,所有頁(yè)面都可引用頁(yè)面不能被其他頁(yè)面所引用。 umi,中文可發(fā)音為烏米,是一個(gè)可插拔的企業(yè)級(jí) react 應(yīng)用框架。umi 以路由為基礎(chǔ)的,支持類 next.js 的約定式路由,以及各種進(jìn)階的路由功能,并以此進(jìn)行功能擴(kuò)展...

    30e8336b8229 評(píng)論0 收藏0
  • nginx 適配react-router browserRoute 路由問(wèn)題

    摘要:適配路由問(wèn)題絕對(duì)能用的一篇配置,文末直接有文件,伸手黨直接拿走本文環(huán)境比較復(fù)雜,首先兩層轉(zhuǎn)發(fā),并且訪問(wèn)路徑也不是根路徑。不對(duì)做編碼,因此請(qǐng)求為,可以被規(guī)則匹配到注意是空格。配置錯(cuò)誤解決優(yōu)先級(jí)問(wèn)題后,問(wèn)題依然存在。導(dǎo)致找不到請(qǐng)求。 nginx 適配react-routerbrowserRoute 路由問(wèn)題 絕對(duì)能用的一篇nginx配置,文末直接有文件,伸手黨直接拿走 本文環(huán)境比較復(fù)雜,首...

    codeGoogle 評(píng)論0 收藏0
  • PHP面向?qū)ο?/b>

    摘要:面向?qū)ο竺嫦驅(qū)ο蠡A(chǔ)面向?qū)ο笫裁词穷惥哂邢嗤瑢傩蕴卣骱头椒ㄐ袨榈囊幌盗袀€(gè)體的集合,類是一個(gè)抽象的概念。析構(gòu)函數(shù),當(dāng)一個(gè)對(duì)象被銷毀前,自動(dòng)調(diào)用。作用是為新克隆的對(duì)象進(jìn)行初始化賦值對(duì)象序列化時(shí),自動(dòng)調(diào)用。使用抽象類的作用限制實(shí)例化。 面向?qū)ο?面向?qū)ο蠡A(chǔ) 面向?qū)ο?什么是類? 具有相同屬性(特征)和方法(行為)的一系列個(gè)體的集合,類是一個(gè)抽象的概念。 什么是對(duì)象? 從類中,拿到的具有具體...

    seanlook 評(píng)論0 收藏0
  • Java 面向?qū)ο? 類 對(duì)象 方法 變量 封裝

    摘要:因?yàn)橥ǔ0巡皇褂眯揎椀某蓡T變量和方法也稱為實(shí)例變量實(shí)例方法。形參個(gè)數(shù)可變的方法允許定義形參個(gè)數(shù)可變的參數(shù),從而允許為方法指定數(shù)量不確定的形參。方法返回值類型修飾符等,與方法重載沒(méi)有任何關(guān)系。 類和對(duì)象 定義類 面向?qū)ο蟮某绦蛟O(shè)計(jì)過(guò)程中有兩個(gè)重要概念:類(class)和對(duì)象(object,也被稱為實(shí)例,instance),其中類是某一批對(duì)象的抽象,可以把類理解成某種概念;對(duì)象才是一個(gè)具體...

    huangjinnan 評(píng)論0 收藏0
  • Java 面向?qū)ο螅ㄉ希?/b>

    摘要:對(duì)象的引用關(guān)鍵字總是指向調(diào)用該方法的對(duì)象。根據(jù)出現(xiàn)位置的不同,作為對(duì)象的默認(rèn)引用有兩種情形。構(gòu)造器中引用該構(gòu)造器正在初始化的對(duì)象。如果同一個(gè)類中包含了兩個(gè)或兩個(gè)以上方法的方法名相同,但形參列表不同,則被稱為方法重載。 類和對(duì)象 定義類 面向?qū)ο蟮某绦蛟O(shè)計(jì)過(guò)程中有兩個(gè)重要概念:類(class)和對(duì)象(object,也被稱為實(shí)例,instance),其中類是某一批對(duì)象的抽象,可以把類理解成...

    SimonMa 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<