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