为什么我可以在没有mapDispatchToProps的情况下调用我的动作创建者?

时间:2017-09-06 04:33:39

标签: reactjs react-redux redux-form

有人可以帮助解释为什么以下代码能够访问 mySubmitAction 操作创建者而不包含包括mapDispatchToProps()吗?我知道handleDubmit()是由reduxForm()装饰器提供的,但我的自定义动作创建者在哪里被传入?

import React, { Component } from 'react';
import { Field, reduxForm } from 'redux-form';
import { connect } from 'react-redux';
import * as Actions from '../actions';

const validate = values => {
    const errors = {};
    if (!values.title) {
        errors.title = "Please enter a title"
    }

    return errors;
};

class myForm extends Component {
    handleFormSubmit = (values) => {
        this.props.mySubmitAction(values);
    };

    render() {
        return (
            isOpen={ this.props.modalIsOpen }
            onRequestClose={ () => this.props.onRequestClose() }>

            <form onSubmit={this.props.handleSubmit(this.handleFormSubmit)}>
                <input name="title" className="form-control" type="text"  />
                <button action="submit" className="btn btn-primary">Submit</button>
            </form>
        )
    }
}

const createReduxForm = reduxForm({form: 'myForm', validate});
export default connect(null, Actions)(createReduxForm(SessionForm));

1 个答案:

答案 0 :(得分:1)

当您import * as Actions from '../actions时,Actions是您的操作名称和操作创建者的对象映射。当您将对象作为mapDispatchToProps参数传递时,connect默认情况下会将每个操作创建者包装成dispatch个调用。

请参阅react-redux connect API

  

[mapDispatchToProps(dispatch,[ownProps]):dispatchProps](对象或函数):如果传递了一个对象,则假定其中的每个函数都是一个Redux动作创建者。具有相同函数名称的对象,但每个动作创建者都包含在一个调度调用中,因此可以直接调用它们,它们将合并到组件的道具中。