Reactjs 使用mapDispatchToProps对Redux Thunk作出反应

Reactjs 使用mapDispatchToProps对Redux Thunk作出反应,reactjs,redux,redux-thunk,Reactjs,Redux,Redux Thunk,查看如何使用mapDispatchToProps的示例,大多数示例遵循以下模式,该函数以dispatch作为参数返回对象: const mapDispatchToProps = (dispatch) => { return({ someFunc: (arg) => {dispatch(someFunc(arg))} }) } 我的问题是,如果我的所有操作都使用thunk,这意味着它们都可以访问dispatch,为什么我需要使用上面的示例来将函数映射到

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

const mapDispatchToProps = (dispatch) => {
    return({
        someFunc: (arg) => {dispatch(someFunc(arg))}
    })
}
我的问题是,如果我的所有操作都使用
thunk
,这意味着它们都可以访问
dispatch
,为什么我需要使用上面的示例来将函数映射到我的
容器中的道具

经过实验,我找到了另一种似乎有效的方法,但我不确定这是否是最佳实践

Main.jsx

import * as mainActions from '../actions/mainActions'
import * as menuActions from '../actions/menuActions'

const actionsToMap = {...mainActions, ...menuActions}
export default connect(mapStateToProps, actionsToMap)(Main)

这种方法有什么问题吗

这两种方法都是正确的,当您希望将一些动作创建者传递给不知道Redux的组件,并且不希望将dispatch或Redux store传递给该组件时,也可以使用这两种方法。从技术上讲,这是它的唯一用例

从、
mapDispatchToProps
中提取它可以是函数或对象

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


希望这有帮助

分离关注点是一个好主意,在几乎所有的应用程序中,最好使用动作创建者(第二个示例中就是这样做的),而不是使用普通对象(第一个示例中)

有几个好处:

  • 如果它不隐藏在对象/函数中,则更易于扩展和转换
  • 更容易测试独立的功能性操作。(您是否尝试过测试第一个示例?)
  • 可重复使用-如果应用程序的其他部分需要发送相同的操作,会发生什么情况,您会剪切并粘贴此发送吗
  • 现在考虑1和3,如果你在几个地方分派这个,你需要扩展?
  • 不仅仅是我这么说,Redux文档在这里介绍了这一点:


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

    我想您会从中得到答案。实际上,连接的第二个参数是函数或对象