了解ReduxForm连接函数语法

时间:2017-10-18 13:32:40

标签: javascript reactjs redux react-redux redux-form

我习惯了:

我习惯看到这样的事情:

export default connect(mapStateToProps, mapDispatchToProps)(BookList);

mapDispatchToProps看起来像这样:

function mapDispatchToProps(dispatch) {
  return bindActionCreators({selectBook: selectBook}, dispatch);
}

我遇到过什么(在ReduxForm中):

export default reduxForm({ 
  validate,
  form: 'PostsNewForm'
})(
  connect(null, {createPost})(PostsNew)
);

我发现这部分特别令人费解:connect(null, {createPost})(PostsNew)

这行代码究竟与上面的代码有什么不同?为什么我们不需要mapDispatchToProps?

2 个答案:

答案 0 :(得分:0)

如果需要,您可以使用mapStateToPropsreact-redux不需要它。

取自DOCS

的示例
import React, { Component } from 'react';
import { reduxForm } from 'redux-form';
import { connect } from 'react-redux';

class Example extends Component {
    // ...
};

const mapStateToProps = (state) => ({
    // ...
});

const mapDispatchToProps = (dispatch)  => ({
    // ...
});

Example = connect(
    mapStateToProps,
    mapDispatchToProps
)(Example);

export default reduxForm({
    form: 'example' // a unique name for this form
})(Example);

答案 1 :(得分:0)

connect' s mapDispatchToProps允许对象文字的简写形式,也就是说,如果要映射到的函数(传递给组件的最终结果)与动作创建者具有相同的签名,将被派遣,有必要做所有bindActionCreator事情的吵闹。将对象文字作为mapDispatchToProps参数传递,告诉react-redux为您执行此操作。

因此,您的第一个示例可以重写为

connect(mapStateToProps, { selectBook })(BookList)

如果您不确定{ selectBook }{ selectBook: selectBook }的等效原因,您可能还想查看下面的mdn链接。

参考: https://github.com/reactjs/react-redux/blob/master/docs/api.md#inject-todos-and-specific-action-creators-addtodo-and-deletetodo-with-shorthand-syntax

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer#New_notations_in_ECMAScript_2015