首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mapDispatchToProps和{action}有什么区别?

mapDispatchToProps和{action}有什么区别?
EN

Stack Overflow用户
提问于 2021-02-25 15:03:39
回答 2查看 108关注 0票数 0

所以我很久以来一直在想,之间的区别是什么?

代码语言:javascript
复制
connect(mapStateToProps, mapDispatchToProps)(ComponentName)

代码语言:javascript
复制
connect(mapStateToProps, {action})(ComponentName)

我一直在使用第二个版本,但我不知道这是否是一个好做法。任何反馈都是有用的,因为我真的想知道是否有什么不同,如果没有,为什么每个人都使用mapDispatchToProps()而不只是导出{action}之类的操作呢?我猜如果你有很多动作,你会使用mapDispatchToProps,但是如果你只有3-4,你为什么不像连接中的{action}那样导出它们?

EN

回答 2

Stack Overflow用户

发布于 2021-02-25 17:49:27

关于mapDispatchToProps,您的意思是什么是值得怀疑的,因为这个参数可以是对象或函数。

如果是将对象重写为变量,如下所示:

代码语言:javascript
复制
const mapDispatchToProps = { action1, action2, action3 }
connect(mapStateToProps, mapDispatchToProps)(ComponentName)

与:

代码语言:javascript
复制
connect(mapStateToProps, { action1, action2, action3 })(ComponentName)

这不是良好实践的问题,而是个人偏好和/或您的队友的问题。

另一方面,mapDispatchToProps也可以是一个函数。您可以问哪一个最好作为参数传递: function。将函数定义为可以在文档中读取的好处

将mapDispatchToProps定义为一个函数可以使您在自定义组件接收的函数以及它们如何分派操作方面具有最大的灵活性。

因此,如果您想要自定义您的支柱分派函数,可以将其定义为如下函数:

代码语言:javascript
复制
const mapDispatchToProps = (dispatch, ownProps) => {
  return {
    onClick: event => dispatch(myAction1(event.target.value)),
    addItem: () => dispatch(myAction2(ownProps.itemId))
}

connect(mapStateToProps, mapDispatchToProps)(ComponentName)

上面是一个简单的示例,其中您有一个支柱onClick,它已经处理了预期的event参数。该函数还采用ownProps,您可以根据需要在调度函数中使用(比如第二个支柱函数)。

但是,如果您没有看到这需要自定义您的分派函数,那么您可以像已经传递的那样只传递一个对象。

票数 1
EN

Stack Overflow用户

发布于 2021-02-25 18:21:58

这是一种不错的做法。实际上,在react-redux文档本身中建议这样做。

因为这是非常常见的,所以connect()支持mapDispatchToProps参数的“对象简写”表单:如果您传递一个充满动作创建者而不是函数的对象,连接将自动为您内部调用bindActionCreators。我们建议始终使用“object shorthand”形式的mapDispatchToProps,除非您有特定的理由自定义调度行为。

您可以在这一页的文件中找到所有相关信息。

我希望这能消除你的疑虑。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66371114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档