首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >既然我们已经有了mapDispatchToProps,为什么还要redux-thunk呢?

既然我们已经有了mapDispatchToProps,为什么还要redux-thunk呢?
EN

Stack Overflow用户
提问于 2017-06-12 15:08:32
回答 5查看 1.1K关注 0票数 4

Redux-thunk允许您创建返回函数而不是操作的操作创建器。内部函数接收存储方法dispatch和getState作为参数。

代码语言:javascript
复制
function incrementAsync() {
  return (dispatch, getState) => {
    setTimeout(() => {
       dispatch(increment());
    }, 1000);
  };
}

但与此同时,react-redux的connect已经有了一个mapDispatchToProps参数,可用于将操作创建器包装到调度调用中,以便可以直接调用它们。使用mapDispatchToProps,您已经可以这样做,

代码语言:javascript
复制
const mapDispatchToProps = (dispatch) => ({
  incrementAsync: () => {
    setTimeout(() => {
      dispatch(increment());
    }, 1000);
  }
});
export default connect(mapStateToProps, mapDispatchToProps)(MyComponent)

在我看来,没有redux-thunk也可以做到这一点。为什么我们首先要有redux-thunk库呢?我确信我只是看不到它,因为redux-thunk是一个相当流行的库。

EN

Stack Overflow用户

发布于 2018-08-25 05:14:01

确实,您可以通过这种方式从操作访问dispatch,但是redux-thunk使之成为可能,而不需要包装器函数和显式分派移交。

您还可以通过作为第二个参数提供的getState()函数从您的操作中立即访问状态。

代码语言:javascript
复制
// actionFile.js
export someAction(dispatch) {
  return function(value) {
    dispatch({ type: 'SOME_TYPE', value });
  }
}

// component.jsx
const mapDispatchToProps = (dispatch) => ({
  someAction: someAction(dispatch)
});

代码语言:javascript
复制
// actionFile.js
export someAction(value) {
  return function(dispatch, getState) {
    dispatch({ type: 'SOME_TYPE', value });
    // maybe do some stuff with getState()
  }
}

// component.jsx
const mapDispatchToProps = { someAction };

它绝对是可选的,但在我看来要干净得多,最重要的是在组件和动作创建者之间提供了更好的关注点分离。也就是说,当你需要异步调度或触发副作用时,你不需要为如何定义你的mapDispatchToProps而烦恼。

票数 0
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44493294

复制
相关文章

相似问题

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