Skip to content

Latest commit

 

History

History
112 lines (108 loc) · 2.18 KB

form-demo.md

File metadata and controls

112 lines (108 loc) · 2.18 KB
// 设置校验规则
const rules = {
  name(rule, value, callback) {
    if (!rule.required(value)) {
      callback("姓名不能为空");
      return false;
    }
    if (value.length > 5) {
      callback("姓名长度不能超过 5");
      return false;
    }
    return true;
  },
  phone(rule, value, callback) {
    if (!rule.required(value)) {
      callback("手机号码不能为空");
      return false;
    }
    if (!rule.phone(value)) {
      callback("手机号码不正确");
      return false;
    }
    return true;
  },
  hobby(rule, value, callback) {
    if (value.length < 2) {
      callback("至少选择 2 项");
      return false;
    }
    return true;
  }
}

// Form 用法
refFunc = node => {
  this.ref = node;
}
  
<ClForm ref={this.refFunc} model={model} rules={rules}>
  <ClFormItem prop="name" required>
    <ClInput
      title="姓名(失焦)"
      value={model.name}
      onBlur={value => {
        this.setState({
          model: {
            ...this.state.model,
            name: value
          }
        });
      }}
    />
  </ClFormItem>
  <ClFormItem prop="phone" required>
    <ClInput
      title="手机号码(实时)"
      value={model.phone}
      onChange={value => {
        this.setState({
          model: {
            ...this.state.model,
            phone: value
          }
        });
      }}
    />
  </ClFormItem>
  <ClFormItem prop="hobby">
    <ClCheckbox
      type="form"
      shape="round"
      title="选择爱好"
      checkboxGroup={[
        {
          key: "下棋",
          value: "xiaqi"
        },
        {
          key: "画画",
          value: "huahua"
        },
        {
          key: "唱歌",
          value: "singsong"
        }
      ]}
      onChange={value => {
        this.setState({
          model: {
            ...model,
            hobby: value
          }
        });
      }}
    />
  </ClFormItem>
</ClForm>

// 整体校验
// 直接调用 ref 里的 validate 方法
handleSubmit() {
  this.ref.validate(success => {
    this.setState({
      message: `数据校验${success ? "通过" : "未通过"}`,
      messageType: success ? "success" : "error",
      showMessage: true
    });
  });
}