使用mapDispatchToProps实现Redux Thunk

时间:2017-08-10 07:49:36

标签: reactjs redux redux-thunk

查看如何使用mapDispatchToProps大多数示例的示例,遵循以下模式,该函数返回以dispatch为参数的对象:

const mapDispatchToProps = (dispatch) => {
    return({
        someFunc: (arg) => {dispatch(someFunc(arg))}
    })
}

我的问题是,如果我的所有操作都使用thunk,这意味着他们无论如何都可以访问dispatch,为什么我需要使用上面的示例将函数映射到我{{}中的道具1}}?

经过实验,我发现了另一种似乎有效的方法,但我不确定这是否是最佳做法...

Main.jsx

containers

这种方法有什么问题吗?

2 个答案:

答案 0 :(得分:1)

这两种方法都是正确的,如果您想将某些操作创建者传递给不了解Redux的组件,并且您不想传递dispatch或Redux存储,也可以使用bindActionCreators它。从技术上讲,这是它的唯一用例。

documentationmapDispatchToProps拉出来可以是一个功能或对象。

我认为您的第一种方法适用于文档,因为您可以轻松查看您在组件中使用的操作创建者的签名,而无需导航到操作创建者文件。除此之外,在大多数情况下,我很好地使用对象(第二种方法)。

希望这有帮助!

答案 1 :(得分:0)

分离关注点是一个好主意,并且在几乎所有应用中,最好使用Action Creators(这是您在第二个示例中所做的)反对使用普通对象(如第一个示例)

有几个好处:

  1. 如果未隐藏在对象/函数中,则更易于扩展和转换
  2. 更容易测试孤立的功能动作。 (您是否尝试过测试第一个示例?)
  3. 可以重复使用-如果您应用的其他部分需要调度相同的操作,您会剪切并粘贴此调度吗?
  4. 现在将1和3一起考虑,如果您在多个地方分派了这个,并且需要扩展?

不仅仅是我这样说,Redux文档在这里介绍了它:https://redux.js.org/recipes/reducingboilerplate#action-creators

话虽如此,他们也说普通对象可能就足够了,但是考虑到动作创建者实际上是多么简单,在几乎所有情况下都值得使您的工作具有扩展性。