代码之家  ›  专栏  ›  技术社区  ›  Xero

创建组件时的调度操作

  •  0
  • Xero  · 技术社区  · 6 年前

    我有一个这样的组件:

    class FormItem extends React.PureComponent {
    
        constructor(props){
            super();
            props.dispatch(setFormCreated(props.formBuilder, props.formId)); 
        }
    
       render(){
           ...
       }
    }
    
    const mapStateToProps = state => {
        return {
            doValidation: state.formsReducer.validationRequested
        };
    };
    
    const mapDispatchToProps = dispatch => ({
        onValidationSucceed: formId =>  dispatch(setFormValidationSucceed(formId)),
        onValidationFailed: formId => dispatch(setFormValidationFailed(formId))
    });
    
    export default connect(mapStateToProps, mapDispatchToProps)(FormItem);
    

    我想在创建组件时分派一个操作。第5行:

    props.dispatch(setFormCreated(props.formBuilder, props.formId)); 
    

    但我得到了:

    类型错误:props.dispatch不是函数

    2 回复  |  直到 6 年前
        1
  •  3
  •   Bhojendra Rauniyar    6 年前

    在使用构造函数内的props之前,需要将props传入super:

    super(props);
    
        2
  •  0
  •   Dan    6 年前
    const mapDispatchToProps = dispatch => ({
        onValidationSucceed: formId =>  dispatch(setFormValidationSucceed(formId)),
        onValidationFailed: formId => dispatch(setFormValidationFailed(formId))
        onFormCreated: (formBuilder, formId) => dispatch(setFormCreated(formBuilder, formId))
    });
    

    在您的组件中,您可以使用以下代码(我将把您的代码放在 componentDidMount )这也假设你路过 formBuilder formId 作为道具。

    componentDidMount() {
      const { onFormCreated, formBuilder, formId } = this.props;
      onFormCreated(formBuilder, formId)
    }