在使用 syncErrors 之前等待 redux-form 完成

Wait for redux-form to finish before using syncErrors

我正在使用 redux-form 来处理 redux 中的表单数据。

我注意到,为了使用 syncErrors 状态,检查验证错误,我需要首先检查实际的 redux-form 是否已经完成渲染,否则 React 会抱怨它找不到未定义的 syncErrors - 暗示 this.props.accountFormredux-form 尚不可用。

这是预期的行为吗?

这是破解的代码:

render() {
  return (
    <SignUpInForm>
        <div>
          <Field
            name="name"
            component={renderTextField}
            label="Full Name*"
          />
        </div>
        <div>
          <Field
            name="email"
            component={renderTextField}
            label="Email Address*"
          />
        </div>
      <div>
        <Button
          disabled={!!this.props.accountForm.syncErrors}
          onClick={this.signUp}
        >
          Save
        </Button>
      </div>
      ..
    </SignUpInForm>
  )
}

这是有效的代码:

render() {
  return (
    !!this.props.accountForm && (
      <SignUpInForm>
          <div>
            <Field
              name="name"
              component={renderTextField}
              label="Full Name*"
            />
          </div>
          <div>
            <Field
              name="email"
              component={renderTextField}
              label="Email Address*"
            />
          </div>
        <div>
          <Button
            disabled={!!this.props.accountForm.syncErrors}
            onClick={this.signUp}
          >
            Save
          </Button>
        </div>
        ..
      </SignUpInForm>
    )
  )
}

对我来说,这看起来有点丑!

注意 - 这就是我将它连接到减速器的方式:

const mapStateToProps = state => {
  return {
    accountForm: state.form.accountForm
  };
};

Account = connect(
  mapStateToProps,
  null
)(Account);

export default withRouter(
  reduxForm({
    form: "accountForm",
    validate
  })(Account)
);

然后 combineReducers 文件如下所示:

import { combineReducers } from "redux";
import { reducer as reduxForm } from "redux-form";

export default combineReducers({
  form: reduxForm
});

我一直在验证 redux-form 错误!

我通过使用以下 redux-form 道具检查错误解决了这个问题:

const { invalid, submitting } = this.props;

然后在提交按钮中我做这样的事情:

          <Button
            disabled={invalid || submitting }
            onClick={this.signUp}
          >