什么时候在 react/redux 中使用 bindActionCreators?

新手上路,请多包涵

bindActionCreatorsRedux 文档指出:

bindActionCreators 的唯一用例是当您想要将一些动作创建者传递给不了解 Redux 的组件,并且您不想将调度或 Redux 存储传递给它时。

将使用/需要 bindActionCreators 的示例是什么?

哪种组件不会意识到 Redux

两种选择的优点/缺点是什么?

 //actionCreator
import * as actionCreators from './actionCreators'

function mapStateToProps(state) {
  return {
    posts: state.posts,
    comments: state.comments
  }
}

function mapDispatchToProps(dispatch) {
  return bindActionCreators(actionCreators, dispatch)
}

对比

function mapStateToProps(state) {
  return {
    posts: state.posts,
    comments: state.comments
  }
}

function mapDispatchToProps(dispatch) {
  return {
    someCallback: (postId, index) => {
      dispatch({
        type: 'REMOVE_COMMENT',
        postId,
        index
      })
    }
  }
}

原文由 d.code 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 491
2 个回答

我不认为最受欢迎的答案实际上解决了这个问题。

下面的所有示例基本上都做同样的事情,并遵循没有“预绑定”的概念。

 // option 1
const mapDispatchToProps = (dispatch) => ({
  action: () => dispatch(action())
})

// option 2
const mapDispatchToProps = (dispatch) => ({
  action: bindActionCreators(action, dispatch)
})

// option 3
const mapDispatchToProps = {
  action: action
}

Option #3 is just a shorthand for option #1 , so the real question why one would use option #1 vs option #2 .我已经看到它们都在 react-redux 代码库中使用,我发现它相当混乱。

我认为混乱来自这样一个事实,即 react-redux doc 中的所有 示例 都使用 bindActionCreatorsbindActionCreators 的文档(如问题本身所引用的)说不要将它与 react 一起使用-redux。

我想答案是代码库的一致性,但我个人更喜欢在需要时将操作显式包装在 调度 中。

原文由 Diana Suvorova 发布,翻译遵循 CC BY-SA 4.0 许可协议

99% 的时间,它与 React-Redux connect() 函数一起使用,作为 mapDispatchToProps 参数的一部分。它可以在您提供的 mapDispatch 函数中显式使用,或者如果您使用对象速记语法并将充满动作创建者的对象传递给 connect 则自动使用。

这个想法是,通过预先绑定动作创建者,您传递给 connect() 的组件在技术上“不知道”它已连接 - 它只知道它需要运行 this.props.someCallback() .另一方面,如果您没有绑定动作创建者,并调用了 this.props.dispatch(someActionCreator()) ,现在组件“知道”它已连接,因为它期望 props.dispatch 存在。

我在我的博客文章 Idiomatic Redux: Why use action creators 中写了一些关于这个主题的想法。 .

原文由 markerikson 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进