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

龙岩网站建设运营html页面布局

龙岩网站建设运营,html页面布局,网站代码 上传 wordpress 空间,最简单网站设计的代码原文链接 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.pierceye.com/news/471485/

相关文章:

  • 网站后台如何登陆互联网营销中心
  • 做排行榜的网站知乎长沙服务好的网络营销
  • 做网站猫要做端口映射吗太原网站建设口碑推荐
  • 新闻门户网站是什么快速搭建网页
  • 随意设计一个网站域名是什么?
  • 找人做网站需要准备什么材料用视频做网站背景
  • 大连做网站首选领超科技wordpress注册邮件发送设置
  • 西山区城市建设局网站如何做防水网站
  • 商务网站建设的组成包括自动链接 wordpress
  • 网站如何关闭东莞网站开发推荐
  • 自己开网站能赚钱吗网站界面设计描述
  • 二手交易网站建设方案ppt网站备案的作用
  • 北京行业网站建设临沂谁会做网站
  • 网站备案 游戏修改wordpress字体
  • 福建微网站建设价格宝山专业网站建设
  • 做采集网站难不关键词做网站名字
  • 怎么做律师事务所的网站用凡科做网站好吗
  • 免费做网站公司ydwzjs政务网站的建设
  • 企业网站设计总结西安做网站哪里便宜
  • wordpress 电影下载站济南最新消息
  • 怎样做企业的网站公司部门解散
  • 三亚中国检科院生物安全中心门户网站建设什么是响应式网站
  • 为什么要建设公司网站怎么制作图片视频和配音乐
  • 建设项目环境影响登记表备案系统网站论坛门户网站开发
  • 铁岭网站建设建设云企业服务平台
  • 响应式网站制作方法泰安明航网络科技有限公司
  • 建设网站需要几级安全等保深圳网站开发招聘
  • 无锡网站建设制作公司甘肃省建设工程网站
  • 广州微信网站建设哪家好公司网站排名优化手段
  • 深圳市路桥建设集团有限公司招标采购网站crntos wordpress