Redux 源碼初探

標簽: 源碼解析,前端


Redux

1. Reducer

combineReducers
將多個reducer 合并成一個reducer . 在后面store處理中. 可以直接是操作這個合并的reducer ,而不用操作多個reducer..每個reducer 處理返回的state 存儲在store 的state 以reducer名稱為key.

2. Store

createStore
維護一個state.這個state 是redux 的state 跟react 的state 不同.同時提供了幾個方法:
getState(): 返回當前的state
subscribe(): 監(jiān)聽state 的變化
dispatch(): 當用戶發(fā)起一個action會使用這個方法將action 傳遞給reducer.
同時對注冊的監(jiān)聽器進行回調(diào).
replaceReducer: 替換Reducer

3.Action

bindActionCreator
將我們生成action 的方法跟dispatch方法連接起來.
例如. 有一個生成actionB 的方法createActionB .
通過 bindActionCreator 會生成方法新的createActionB .新的會代理上面的createActionB然后將生成的actionB 使用dispatch派發(fā)出去.

4.Middleware

applyMiddleware
這應(yīng)該是redux 中最有意思的一個方法.
通過使用createStore 生成一個store和dispatch
當用戶的action發(fā)起以后會先經(jīng)過middlewares ,先被middlewares處理, 然后處理過的action再被上面dispatch處理掉.
通過中間件我們可以做特別有意思的意思, 比如日志跟蹤,時光旅行,異步action
這里主要是用一個dispatch 來代理store的dispatch 方法.來實現(xiàn)中間件的功能.

Paste_Image.png

react-redux

connect
mapStateToProps: 將redux 的state 轉(zhuǎn)換成props
mapDispatchToProps: 主要用于將action和dispatch 連接起來然后放置在props 中
mergeProps: 講上面的兩個生成的props 和connect 自己的props 合并在一起傳遞給子控件.

connectAdvanced:
該方法在 redux 5.0 加入.
看這個方法名可以看出這個是connect 的高階版. 有更自由的定制.和更好的擴展. 比方說指定特定的store,然后更靈活的組合props.
從可以指定特定store上可以看出.官方開始擁抱多store 的方案.

Provider
這是一個Component 所以它有Component 有的生命周期. 這個的作用其實就是將redux 生成的store 傳遞到下面的Component.界面的渲染交給他的子類來處理.

tip:

store 的state 和react 中的state 在react-redux 中的關(guān)系.
在react-redux 3.0 中 store 的state 存儲在react 的state 中以storeState 為key.
在react-redux 4.0 中store 的state 直接存儲在react 的state , 這里可以把這兩個當成同一個東西.
在react-redux 5.0 中store 的state 已經(jīng)從react 的state 中剝離出來.

react-thunk

function createThunkMiddleware(extraArgument) {
  return ({ dispatch, getState }) => next => action => {
    if (typeof action === 'function') {
      return action(dispatch, getState, extraArgument);
    }

    return next(action);
  };
}
const thunk = createThunkMiddleware();
thunk.withExtraArgument = createThunkMiddleware;
export default thunk;

這是redux 的中間件. 主要的功能是擴展你的action. 他支持你返回一個function 類型的action. 在中間件的時候調(diào)用你的function 并返回可以被Reducer 處理的action.

尾巴

redux ,react-redux ,react-thunk 源碼還是簡單的.但是里面的思想還是值得我們?nèi)ネ魄?琢磨.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末科吭,一起剝皮案震驚了整個濱河市珠月,隨后出現(xiàn)的幾起案子尼啡,更是在濱河造成了極大的恐慌葛家,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡许昨,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門褥赊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來车要,“玉大人,你說我怎么就攤上這事崭倘∫硭辏” “怎么了?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵司光,是天一觀的道長琅坡。 經(jīng)常有香客問我,道長残家,這世上最難降的妖魔是什么榆俺? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮坞淮,結(jié)果婚禮上茴晋,老公的妹妹穿的比我還像新娘。我一直安慰自己回窘,他們只是感情好诺擅,可當我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著啡直,像睡著了一般烁涌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上酒觅,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天撮执,我揣著相機與錄音,去河邊找鬼舷丹。 笑死抒钱,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的颜凯。 我是一名探鬼主播谋币,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼装获!你這毒婦竟也來了瑞信?” 一聲冷哼從身側(cè)響起厉颤,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤穴豫,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體精肃,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡秤涩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了司抱。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片筐眷。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖习柠,靈堂內(nèi)的尸體忽然破棺而出匀谣,到底是詐尸還是另有隱情,我是刑警寧澤资溃,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布武翎,位于F島的核電站,受9級特大地震影響溶锭,放射性物質(zhì)發(fā)生泄漏宝恶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一趴捅、第九天 我趴在偏房一處隱蔽的房頂上張望垫毙。 院中可真熱鬧,春花似錦拱绑、人聲如沸综芥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽毫痕。三九已至,卻和暖如春迟几,著一層夾襖步出監(jiān)牢的瞬間消请,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工类腮, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留臊泰,地道東北人。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓蚜枢,卻偏偏與公主長得像缸逃,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子厂抽,可洞房花燭夜當晚...
    茶點故事閱讀 43,446評論 2 348

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