首页 > 编程知识 正文

什么是中间件,消息中间件原理

时间:2023-05-05 00:26:06 阅读:38001 作者:4377

另一方面,什么样的中间件(Middleware )是介于APP应用系统和系统软件之间的软件,是系统软件提供的基础服务)功能),在网络上进行APP

本文了解了Redux的整个工作流程。 发布action后,reducer会立即计算状态。 整个过程是同步的操作

如果需要支持异步操作,或者需要支持错误处理、日志监视,可以将此过程应用于中间件

在Redux上,中间件位于dispatch进程中,并在分发操作中进行侦听,如下图所示。

其本质函数是对store.dispatch方法进行改造,在Action的发行和Reducer的执行两个阶段之间追加了其他功能

二、常用的中间件有很多优秀的redux中间件。 这里列举两个吧。

redux-thunk :用于异步操作

redux-logger :用于记录

上述中间件都需要用applyMiddlewares注册,起到将所有中间件组合成一个数组依次执行的作用

作为第二个参数传递给createStore

conststore=createstore(reducer,applymiddleware ) thunk,logger ); redux-thunk redux-thunk是官网推荐的异步处理中间件

默认的dispatch(action )必须是操作为JavaScript的对象

redux-thunk中间件确定当前传递的数据类型,如果是函数,则向函数传递参数值dispatch,getState

dispatch函数稍后用于重新分发操作

getState函数允许我们获取以前的状态,考虑到我们后面的一些操作需要依赖于原始状态

因此,dispatch可以用以下函数的形式编写:

constgetHomeMultidataAction=(() return (dispatch ) ) axios.get ) ) http://XXX.xx.xx.xx/test ' ).then RES 分布(changerecommendsaction (data.recommend.list ) ); } }想要实现redux-logger日志功能时,请使用立即可用的redux-logger

导入{ apply middleware,createStore}from'redux '; importcreateloggerfrom ' redux-logger '; 常数日志ger=create logger (; conststore=创建(reducer,applymiddleware ) logger ); 这样,可以通过中间件函数轻松实现日志中记录的信息

三、实现原理首先要看applyMiddlewares的源代码

导出defaultfunctionapplymiddleware (middleware s ) return(createstore )=(reducer,preloadedState,enhancer ) ) ) vardispatch=store.dispatch; varchain=[]; varmiddlewareapi={ getstate : store.getstate,dispatch:(action )=dispatch(action ) }; chain=middleware s.map (middleware=middleware ) middlewareAPI ); dispatch=compose(…chain ) ) store.dispatch; return{.store,dispatch}}}所有中间件都存储在数组chain中,嵌套运行,最后运行store.dispatch。 可见,中间件内部(middlewareAPI )可以获得两种方法: getState和dispatch

在上面的学习中,我们学习了redux-thunk的基本使用

dispatch在内部判断如下,并执行相应的操作。

functionpatchthunk(store ) {letnext=store.dispatch; functiondispatchandthunk (action ) if ) typeofaction==='function ' ) action (store.dispatch,store.getState ) ) ) (else )下一步)动作; } store.dispatch=dispatchandthunk; }实现一个日志输出的原理也非常简单,如下所示。

letnext=store.dispatch; functiondispatchandlog(action ) console.log('dispatching: ',addaction ) 10 ); 下一步(addaction (5); console.log ('新state: ',store.getState ) ); }store.dispatch=dispatchAndLog; 参考文献http://www.Ruan Yifeng.com/blog/2016/09/redux _ tutorial _ part _ two _ async _ operations.html

http://cn.redux.js.org/

--The End--

系列更新中: 20/33

单击下面的卡以解锁

创作不容易,星标,好啊,看三联支持

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。