【问题标题】:Why am I able to call my action creators without a mapDispatchToProps?为什么我可以在没有 mapDispatchToProps 的情况下调用我的动作创建者?
【发布时间】:2017-09-06 04:33:38
【问题描述】:

有人可以帮助解释为什么下面的代码能够访问 mySubmitAction 动作创建者没有包括 mapDispatchToProps()?我知道 handleSubmit() 是由 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));

【问题讨论】:

    标签: reactjs react-redux redux-form


    【解决方案1】:

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

    react-redux connect API

    [mapDispatchToProps(dispatch, [ownProps]): dispatchProps] (Object or Function): 如果传递了一个对象,它里面的每个函数都被假定为一个 Redux action creator。具有相同函数名称但每个动作创建者都包装在调度调用中以便可以直接调用它们的对象将被合并到组件的道具中。

    【讨论】:

    • 好的,我想我明白了。但是,当我可以直接将我的 Actions 对象传递给 connect() 时,为什么还要使用 mapDispatchToProps 呢?
    • 有时您只想向组件公开动作创建者的子集,您可能希望将默认参数注入动作创建者,或有条件地选择动作创建者。这个想法是您可以将操作封装在 mapDispatchToProps 中,而不是将逻辑放在组件中。
    猜你喜欢
    • 1970-01-01
    • 2013-06-27
    • 1970-01-01
    • 2017-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-29
    • 2015-10-14
    相关资源
    最近更新 更多