当前位置: 首页 > news >正文

做阿里巴巴还是做网站好安卓手机怎么做网站

做阿里巴巴还是做网站好,安卓手机怎么做网站,效果图案例网站,代理网址代码原文链接 middleware 的由来 在业务中需要打印每一个 action 信息来调试#xff0c;又或者希望 dispatch 或 reducer 拥有异步请求的功能。面对这些场景时#xff0c;一个个修改 dispatch 或 reducer 代码有些乏力#xff0c;我们需要一个可组合的、自由增减的插件机制… 原文链接 middleware 的由来 在业务中需要打印每一个 action 信息来调试又或者希望 dispatch 或 reducer 拥有异步请求的功能。面对这些场景时一个个修改 dispatch 或 reducer 代码有些乏力我们需要一个可组合的、自由增减的插件机制Redux 借鉴了 Koa 中 middleware 的思想利用它我们可以在前端应用中便捷地实现如日志打印、异步请求等功能。 比如在项目中进行了如下调用后redux 就集成了 thunk 函数调用以及打印日志的功能。 import thunk from redux-thunk import logger from ../middleware/logger const enhancer applyMiddleware(thunk, logger), // 以 redux-thunk、logger 中间件为例介绍中间件的使用 const store createStore(rootReducer, enhancer) 复制代码下面追本溯源来分析下源码。 applyMiddleware 调用入口 export default function createStore(reducer, preloadedState, enhancer) {// 通过下面代码可以发现如果 createStore 传入 2 个参数第二个参数相当于就是 enhancerif (typeof preloadedState function typeof enhancer undefined) {enhancer preloadedStatepreloadedState undefined}if (typeof enhancer ! undefined) {return enhancer(createStore)(reducer, preloadedState)}... } 复制代码由上述 createStore 源码发现applyMiddleware 会进行 applyMiddleware(thunk, logger)(createStore)(reducer, preloadedState) 的调用。 applyMiddleware 源码如下 export default function applyMiddleware(...middlewares) {return createStore (...args) {const store createStore(...args)let dispatch store.dispatchlet chain []const middlewareAPI {getState: store.getState, // 调用 redux 原生方法获取状态dispatch: (...args) dispatch(...args) // 调用 redux 原生 dispatch 方法}// 串行 middlewarechain middlewares.map(middleware middleware(middlewareAPI))dispatch compose(...chain)(store.dispatch)return {...store,dispatch // 返回加工过的 dispatch}} } 复制代码可以发现 applyMiddleware 的作用其实就是返回加工过的 dispatch下面会着重分析 middlewares 是如何串行起来的以及 dispatch 是如何被加工的。 串行 middleware const middlewareAPI {getState: store.getState,dispatch: (...args) dispatch(...args) } chain middlewares.map(middleware middleware(middlewareAPI)) dispatch compose(...chain)(store.dispatch) 复制代码观察上述代码后发现每个 middleware 都会传入参数 middlewareAPI来看下中间件 logger 的源码 以及 redux-thunk 的源码, 发现中间件接受的第一个参数正是 ({ dispatch, getState }) // logger 源码 export default ({ dispatch, getState }) next action {console.log(action)return next(action) // 经 compose 源码分析此处 next 为 Store.dispatch } 复制代码// redux-thunk 源码 export default ({ dispatch, getState }) next action {if (typeof action function) {return action(dispatch)}return next(action) // 此处 next 为 logger 中间件返回的 (action {} 函数 } 复制代码dispatch 是如何被加工的 接着上个小节在 dispatch compose(...chain)(store.dispatch) 中发现了 compose 函数来看下 compose 的源码 export default function compose(...funcs) {// ...return funcs.reduce((a, b) (...args) a(b(...args))) } 复制代码compose 源码中的 funcs.reduce((a, b) (...args) a(b(...args))) 算是比较重要的一句它的作用是返回组合参数后的函数比如 compose(f, g, h) 等价于 (...args) f(g(h(...args)))效果图如下所示调用 this.props.dispatch() 后会调用相应的中间件最终会调用 redux 原生的 store.dispatch()并且可以看到中间件调用的形式类似数据结构中的栈(先进后出)。 拿上个小节提到的 logger、redux-thunk 中间件为例其 middleware 的内部串行调用方式如下从而完成了 dispatch 功能的增强(支持如 this.props.dispatch(func) 的调用以及日志功能)。具体可以看 项目中的运用 action {if (typeof action function) {return action(dispatch)}return (action {console.log(action)return store.dispatch(action)})(action) } 复制代码参考文献 深入React技术栈
http://www.zqtcl.cn/news/442661/

相关文章:

  • 社区智慧警务网站如何推进警务室建设方案广东网络推广服务
  • 东莞艺美网站建设wordpress get header
  • 做玩具什么 网站比较好网址域名
  • 网站做用户登录中国建设部官方网站资格证查询
  • 济宁网站建设公司大型餐饮网站建设
  • 昊源建设监理有限公司网站做那种的视频网站有哪些
  • wordpress滑块代码seo外链增加
  • 衡阳网站建设公司地址书店网站怎么做
  • 如何检查网站是否做cdn加速html网页基础代码
  • 做网站的岗位好吗钓鱼网站到底怎么做
  • 大连做网站那个公司最好wordpress+高清背景
  • 怎样做网站xml案例建网站
  • 海口发布最新通告用二级域名做网站对seo
  • 网站301重定向 权重转移网站不用下载免费软件
  • 网站系统升级昆明做百度网站电话
  • 电子商务与网站建设实践论文wordpress 主题目录
  • 网站页面打不开中小企业网站推广
  • 佛山建网站企业网站怎么维护
  • 网站制作报价明细wordpress喜欢
  • 网站开发2008文化传播有限公司网站建设
  • 个人账号如何注册网站广州专业网站改版设计公司
  • wordpress视频网站采集沈阳建设工程质量检测中心网站
  • 做网站优化哪家好远程管理wordpress站群
  • 实用写作网站做企业策划的公司
  • 如何建立自己手机网站58招聘网站官网
  • 网站程序源码下载网站怎么做定位功能
  • 深圳vi设计公司联系西安seo诊断
  • 老虎淘客系统可以做网站吗绍兴网站专业制作
  • 小公司做网站需要 align center
  • 自己做的网站怎么上传网络什么网站可以找人做系统