使用redux store的dispatch实例与传递dispatch作为参数

时间:2016-10-01 00:49:32

标签: javascript redux middleware react-redux

docs中,Dan没有提供太多推理来改变调度传递到中间件的方式。他只是这么说:

  

但是,启用链接的方式也不同。中间件   可以接受next()调度函数作为参数而不是   从商店实例中读取它。

这是什么原因?对我来说,现在applyMiddleware中的代码将使用存储和分派获取2个参数,而不仅仅是单独存储,这看起来更奇怪。

2 个答案:

答案 0 :(得分:2)

看起来很奇怪不是问题。

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

请注意,默认情况下,函数式语言具有此格式,并且完全正常。

这样做的原因是因为猴子补丁并没有将自己建立为推荐的编程方法。将next传递给函数更加灵活,并且不需要调用任何函数(开发人员的函数),从而减轻了开发人员的负担并降低了出错的可能性。

最后,Dan喜欢解释他为什么以某种方式编码,但作为lib用户,我们低级开发人员不是决策者。 decision has already been made这就是在Redux中使用中间件的方法。您总是可以根据自己的喜好对Redux进行分叉修改,但请注意,Redux的功能不是lib中的代码,而是第三方开发人员附加的代码。如果不玩,就会放弃所有的力量。

答案 1 :(得分:1)

这是一个非常常见的问题,我将很快将其添加到Redux常见问题解答中。

简短的回答是Redux受到功能编程原则的严重影响,并且cur and是Dan和Andrew在进行初始设计时恰好解决的问题。一旦选择了它,它基本上保持这种兼容性。

原始设计在Redux issue #55中进行了讨论,Dan提出了重写,然后在issue #1744拒绝了他自己的提案。