Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 这个来自redux文档的示例是如何工作的?_Javascript_Redux - Fatal编程技术网

Javascript 这个来自redux文档的示例是如何工作的?

Javascript 这个来自redux文档的示例是如何工作的?,javascript,redux,Javascript,Redux,我正在阅读Redux文档,其中列出了应用中间件的不同方法,这些方法可以工作,但在了解Redux如何实际应用中间件之前效率不高 我不知道为什么以下方法会起作用,尽管我知道它为什么不有效: 函数applyMiddlewareByMonkeypatching(商店、中间件){ middleware=middleware.slice() 中间产品 //使用每个中间件转换调度功能。 middleware.forEach(中间件=> store.dispatch=中间件(store) ) } //我们可以

我正在阅读Redux文档,其中列出了应用中间件的不同方法,这些方法可以工作,但在了解Redux如何实际应用中间件之前效率不高

我不知道为什么以下方法会起作用,尽管我知道它为什么不有效:

函数applyMiddlewareByMonkeypatching(商店、中间件){
middleware=middleware.slice()
中间产品
//使用每个中间件转换调度功能。
middleware.forEach(中间件=>
store.dispatch=中间件(store)
)
}
//我们可以使用它应用多个中间件,如下所示:

applyMiddlewareByMonkeypatching(商店,[logger,crashReporter])
看完这些文档后,我相信我有一个答案给你

让我们以logger函数为例。在下面

function logger(store) {
  let next = store.dispatch

  // Previously:
  // store.dispatch = function dispatchAndLog(action) {

  return function dispatchAndLog(action) {
    console.log('dispatching', action)
    let result = next(action)
    console.log('next state', store.getState())
    return result
  }
}
下面是对记录器函数的调用

store.dispatch=记录器(存储)

因此,
存储
实例被传递到
记录器
。进入
logger
函数后,
next
变量保存对原始
store.dispatch
函数的引用。请注意,它尚未被覆盖。现在,使用此行
next(action)
分派操作,并将其存储在
result
中,然后返回
result

覆盖
store.dispatch
函数的全部原因是,您不必显式调用任何试图应用的中间件

从文件中

我们为什么要改写调度?当然,能够称之为 稍后,还有另一个原因:每个中间件都可以 访问(并调用)以前包装的store.dispatch


这是由于闭包的魔力

中的原始分派函数存储在下一个变量中