摘要:的中間件是定義一個函數(shù),對進行改造,在發(fā)出與執(zhí)行之間添加其他功能。
Redux 的中間件是定義一個函數(shù),對 dispatch 進行改造,在發(fā)出 action 與執(zhí)行 reducer 之間添加其他功能。這是對 Redux 進行功能拓展的方式。
Redux 如何支持中間件?applyMiddlewares()
export default function applyMiddleware(...middlewares) { return (createStore) => (reducer, preloadedState, enhancer) => { var store = createStore(reducer, preloadedState, enhancer); var dispatch = store.dispatch; var chain = []; var middlewareAPI = { getState: store.getState, dispatch: (action) => dispatch(action) }; chain = middlewares.map(middleware => middleware(middlewareAPI)); dispatch = compose(...chain)(store.dispatch); return {...store, dispatch} } }
middleware => middleware(middlewareAPI)
每個 middleware 將能訪問 getState 與 dispatch,同時可以知道該 middleware 為高階函數(shù),執(zhí)行返回一個函數(shù)
compose()
dispatch = compose(...chain)(store.dispatch);
export default function compose(...funcs) { if (funcs.length === 0) { return arg => arg } if (funcs.length === 1) { return funcs[0] } const last = funcs[funcs.length - 1] const rest = funcs.slice(0, -1) return (...args) => rest.reduceRight((composed, f) => f(composed), last(...args)) }
(composed, f) => f(composed)
即:
middleware({getState, dispatch})(store.dispatch)
該函數(shù)為高階函數(shù),執(zhí)行返回一個函數(shù)
分析至此,一個 middleware 函數(shù)大致為:
({getState, dispatch})=> (next) => (action) => { // next 即 store.dispatch //...在此拓展功能 action() // action, 這個action執(zhí)行觸發(fā)dispath?? }Action 如何與Dispatch聯(lián)系起來?
action 通過 bindActionCreator 與 dispatch 聯(lián)系起來
bindActionCreator()
function bindActionCreator(actionCreator, dispatch) { return (...args) => dispatch(actionCreator(...args)) }
(...args) => dispatch(actionCreator(...args))
由 actionCreator 可以知道 actionCreator 為高階函數(shù),執(zhí)行返回一個函數(shù)
所以一個 action 的姿勢應(yīng)該為:
()=> () => { type: "", payload }舉例:redux-thunk 中間件
源碼:
function thunkMiddleware({ dispatch, getState }) { return next => action => typeof action === "function" ? action(dispatch, getState) : next(action); }
action 怎么寫?
funciton fetchSomething(){ return (dispatch, getState)=>{ fetch().then((res)=>{ disatch({ type: "FETCH_SOMETHING_DONE" palyload }) }) } }參考:
Redux Middleware Doc
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/81266.html
摘要:而不是卷入無休止的撕逼,用了某某而產(chǎn)生的優(yōu)越,甚至借貶低他人來抬高自己。 前言 ?這是一個系列文章,旨在分享在react及相關(guān)技術(shù)棧實踐過程中的個人感悟,心得。如果有不好的地方,歡迎各位批評指正。 ?由于對react本身還未深入了解,今天我們先來談一談redux相關(guān)的問題。 Who creates it? ?Dan Abramov是redux的作者,同時,他也是Create React...
摘要:寫在最前原文首發(fā)于作者的知乎專欄中間件思想遇見的靈感附,感興趣的同學(xué)可以知乎關(guān)注,進行交流。其中,最重要的一個便是對多線程的支持。在中提出了工作線程的概念,并且規(guī)范出的三大主要特征能夠長時間運行響應(yīng)理想的啟動性能以及理想的內(nèi)存消耗。 寫在最前 原文首發(fā)于作者的知乎專欄:React Redux 中間件思想遇見 Web Worker 的靈感(附demo),感興趣的同學(xué)可以知乎關(guān)注,進行交流...
摘要:的中間件主要是通過模塊實現(xiàn)的。返回的也是一個對象這個其實就是,各個中間件的最底層第三層的哪個函數(shù)組成的圓環(huán)函數(shù)構(gòu)成的這就是對源碼的一個整體解讀,水平有限,歡迎拍磚。后續(xù)的源碼解讀和測試例子可以關(guān)注源碼解讀倉庫 applyMiddleware源碼解析 中間件機制在redux中是強大且便捷的,利用redux的中間件我們能夠?qū)崿F(xiàn)日志記錄,異步調(diào)用等多種十分實用的功能。redux的中間件主要是...
摘要:如果想學(xué)習(xí)項目的底層建設(shè),建議先去學(xué)習(xí)官網(wǎng)案例,之后在學(xué)習(xí)的使用中間件介紹目的是提供第三方插件的模式,改變的過程。 前言 React/Redux項目結(jié)束后,當(dāng)我在研究react-router源碼的時候發(fā)現(xiàn)當(dāng)中有一部分含中間件的思想,所以才想把中間件重新梳理一遍;在之前看redux了解到中間件,redux層面中間件的理解對項目前期比較有幫助,雖然項目中后期基本可以忽略這層概念;現(xiàn)在對這部...
摘要:接下來的函數(shù)就有點難度了,讓我們一行一行來看。上面實際的含義就是將數(shù)組每一個執(zhí)行的返回值保存的數(shù)組中。需要注意的是,方法返回值并不是數(shù)組,而是形如初始值的經(jīng)過疊加處理后的操作。從而實現(xiàn)異步的。 這段時間都在學(xué)習(xí)Redux,感覺對我來說初學(xué)難度很大,中文官方文檔讀了好多遍才大概有點入門的感覺,小小地總結(jié)一下,首先可以看一下Redux的基本流程:showImg(https://segm...
閱讀 2959·2023-04-25 17:46
閱讀 3588·2021-11-25 09:43
閱讀 1092·2021-11-18 10:02
閱讀 3051·2021-10-14 09:43
閱讀 2768·2021-10-13 09:40
閱讀 1524·2021-09-28 09:35
閱讀 2184·2019-08-30 15:52
閱讀 3154·2019-08-30 14:06