使用单个 mapDispatchToProps 的缺点是啥?

Posted

技术标签:

【中文标题】使用单个 mapDispatchToProps 的缺点是啥?【英文标题】:What are drawbacks of using a single mapDispatchToProps?使用单个 mapDispatchToProps 的缺点是什么? 【发布时间】:2016-06-15 16:08:21 【问题描述】:

我尝试遵循 Redux 文档中有关演示/容器组件的规则,并使用 react-redux connect()连接我的容器。我使用 mapDispatchToProps 和 bindActionCreators 将所需的操作注入到道具调用 actions 中。我从不使用第二个参数ownProps

随着我的应用程序变得越来越复杂,我最终得到了很多几乎相同的 mapDispatchToProps()(每个容器一个);它们绑定了几乎所有动作创建者的所有动作。

所以我想知道:只有一个 mapDispatchToProps 函数绑定所有操作并在每个容器中使用它会有什么缺点?

类似的东西:

import  bindActionCreators  from 'redux'

import * as EventsActionCreators from '../../actions/EventsActionCreators'
import * as TagsActionCreators from '../../actions/TagsActionCreators'
import * as UsersActionCreators from '../../actions/UsersActionCreators'


export default function mapDispatchToProps(dispatch) 
  return 
    actions: bindActionCreators(
      
        ...EventsActionCreators,
        ...TagsActionCreators,
        ...UsersActionCreators,
      ,
      dispatch
    ),
  

【问题讨论】:

【参考方案1】:

如果您的应用程序简单到足以保证这一点,那么我会说去吧。我看到的缺点(如果有的话)与您的 connects 没有明确说明可用的操作有关。要知道可用的内容,您必须查看mapDispatchToProps 的定义。

也就是说,为什么还要将此作为函数? mapDispatchToProps 可以接收一个对象,所以在你的mapDispatchToProps.js 中,这就足够了:

import * as EventsActionCreators from '../../actions/EventsActionCreators'
import * as TagsActionCreators from '../../actions/TagsActionCreators'
import * as UsersActionCreators from '../../actions/UsersActionCreators'

export default 
  ...EventsActionCreators,
  ...TagsActionCreators,
  ...UsersActionCreators,

然后

import mapDispatchToProps from './mapDispatchToProps';
import SomeComponent from './SomeComponent';
export ConnectedComponent = connect(null, mapDispatchToProps)(SomeComponent);

【讨论】:

以上是关于使用单个 mapDispatchToProps 的缺点是啥?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Jest/Enzyme 测试异步 mapDispatchToProps 操作会出错

mapDispatchToProps 方法内部的访问状态

React Redux:使用 Enzyme/Jest 测试 mapStateToProps 和 mapDispatchToProps

next.js mapStateToProps、mapDispatchToProps 和 getInitialProps

使用 Jest 时是不是有另一种方法来模拟组件的 mapDispatchToProps

我可以在 Redux 中没有 mapStateToProps 的 mapDispatchToProps 吗?