初識React 9 dva簡介

2021-09-13 01:40:23 字數 3018 閱讀 3565

import dva from 'dva';

// 1. initialize

// 2. plugins

// 3. model

// 4. router

// 5. start

dva僅有6個api,如下介紹:

建立應用,返回dva例項

options中包含:

(1) history:預設為hashhistory,如果要配置history為browserhistory,則

import createhistory from 'history/createbrowserhistory';

history: createhistory(),

});

(2) initialstate: 指定初始資料,優先順序高於model中的state,預設為{}

(3) onerror: 管理全域性出錯狀態,如下:

onerror(e)

});

(4) onaction(fn | fn): 在action被dispatch時觸發,用於註冊redux中介軟體,支援函式格式或者函式陣列格式,如下通過redux-logger答應日誌,如:

import createlogger from 'redux-logger';

onaction: createlogger(opts),

});

(5) onstatechange(fn): state改變時觸發,可用於同步state 到 localstorage,伺服器端等

(6) onreducer(fn): 封裝 reducer 執行。比如借助 redux-undo 實現 redo/undo :

import undoable from 'redux-undo';

onreducer: reducer => ;

const newstate = undoable(reducer, undoopts)(state, action);

// 由於 dva 同步了 routing 資料,所以需要把這部分還原

return ;

},},

});

(7) oneffect(fn): 封裝 effect 執行。比如 dva-loading 基於此實現了自動處理 loading 狀態。

(8) onhmr(fn): 熱替換相關,目前用於 babel-plugin-dva-hmr

(9) extrareducers: 指定額外的 reducer,比如 redux-form 需要指定額外的 form reducer

import  from 'redux-form'

extrareducers: ,

});

(10) extraenhancers: 指定額外的 storeenhancer ,比如結合 redux-persist 的使用

import  from 'redux-persist';

extraenhancers: [autorehydrate()],

});

配置 hooks 或者註冊外掛程式。(外掛程式最終返回的是 hooks )

比如註冊 dva-loading 外掛程式的例子:

import createloading from 'dva-loading';

...

hooks 包含2中(3)到(10)

註冊model

model 是 dva 中最重要的概念,以下是典型的例子:

namespace: 'todo',

state: ,

reducers: ) ,

},effects: , ) );

},},

subscriptions: ) ) => );

}});

},},

});

model 包含 5 個屬性:

namespace:model 的命名空間,同時也是他在全域性 state 上的屬性,只能用字串,不支援通過 . 的方式建立多層命名空間。

state:初始值,優先順序低於傳給 dva() 的 opts.initialstate,如下:

initialstate: ,

}); namespace: 'count',

state: 0,

});

reducers:以 key/value 格式定義 reducer。用於處理同步操作,唯一可以修改 state 的地方。由 action 觸發,格式為 (state, action) => newstate 或 [(state, action) => newstate, enhancer]

effects:以 key/value 格式定義 effect。用於處理非同步操作和業務邏輯,不直接修改 state。由 action 觸發,可以觸發 action,可以和伺服器互動,可以獲取全域性 state 的資料等等。格式為

*(action, effects) => void 或 [*(action, effects) => void, ]。

註冊路由表。通常是這樣的:

import  from 'dva/router';

return (

});

而有些場景可能不使用路由,比如多頁應用,所以也可以傳入返回 jsx 元素的函式。比如:

啟動應用。selector 可選,如果沒有 selector 引數,會返回乙個返回 jsx 元素的函式。

那麼什麼時候不加 selector?常見場景有測試、node 端、react-native 和 i18n 國際化支援。

比如通過 react-intl 支援國際化的例子:

import  from 'react-intl';

...

React元件初識

示例demo 編寫函式元件 function hello 箭頭函式表示 const hello 這是第乙個函式元件 div 只有一句話,可不寫return利用reactdom.render 進行渲染 reactdom.render document.getelementbyid root 示例dem...

React元件開發(一)初識React

react不屬於mvc mvvm,只是單純的v層 react核心是元件 提高 復用率 降低測試難度 複雜度 自動dom操作,狀態對應內容。react核心js檔案 react.js和react dom.js,每乙個react元件開發都必須引用這兩個js檔案。browser.js用來將瀏覽器不識別的js...

React 4課 react初識元件

npm init y npm i babel standalone d npm i react react dom d 安裝完成後我們開始學習下面知識 react初識元件title head div src node modules babel standalone babel.js script ...