使用redux store's调度实例vs.将调度作为参数传入

using redux store's instance of dispatch vs. passing in dispatch as parameter

本文关键字:调度 参数 vs 实例 store 使用 redux      更新时间:2023-09-26

在文档中,Dan没有给出改变分派传递到中间件的方式的太多理由。他只是说:

但是还有一种不同的方法来启用链接。中间件是否可以接受next()分派函数作为参数而不是从存储实例中读取。

这是什么原因?对我来说,现在applyMiddleware内部的代码将使用store和dispatch的两个参数,而不仅仅是store,这看起来更奇怪了。

看起来奇怪不是问题。

const logger = store => next => action => {
  console.log('dispatching', action)
  let result = next(action)
  console.log('next state', store.getState())
  return result
}

请注意,函数式语言默认使用这种格式,在那里它是完全正常的。

这样做的原因是因为猴子补丁还没有成为一种推荐的编程方法。将next传递给函数更加灵活,并且不需要调用函数(开发人员的函数)的任何内容,从而减少了开发人员的负担并降低了出错的机会。

最后,Dan喜欢解释他为什么用某种方式编码,但是作为lib用户,我们这些低级的开发人员并不是决策者。我们已经做出了决定,这就是在Redux中使用中间件的方式。您可以随时分叉Redux并根据自己的喜好修改它,但请注意,Redux的强大之处不在于库中的代码,而在于第三方开发人员附加到它上面的代码。如果你不配合,你就会放弃所有的权力。

这是一个经常被问到的问题,我将很快把它添加到Redux常见问题解答中。

简短的回答是Redux深受函数式编程原则的影响,而柯里化是Dan和Andrew在做初始设计时碰巧选择的方法。一旦选择了它,它基本上就会保持这种方式以保持兼容性。

原始设计在Redux第55期中讨论过,Dan提出重写,然后在第1744期中拒绝了他自己的建议。