鍍金池/ 問(wèn)答/HTML/ antd如何優(yōu)雅的驗(yàn)證兩個(gè)input大小?

antd如何優(yōu)雅的驗(yàn)證兩個(gè)input大小?

我有兩個(gè)input,一個(gè)是開始編號(hào),一個(gè)是結(jié)束編號(hào),開始編號(hào)要比結(jié)束編號(hào)小,我看到antd官網(wǎng)上可以自定義validator. 但是有問(wèn)題,比如我給兩個(gè)input都加了驗(yàn)證, 但是每個(gè)驗(yàn)證只有在自己change的時(shí)候觸發(fā),這就導(dǎo)致我改了某一個(gè),其實(shí)已經(jīng)驗(yàn)證正確了,但是另外一個(gè)還是error狀態(tài).
我想要的應(yīng)該是一個(gè)驗(yàn)證,當(dāng)兩個(gè)input任意一個(gè)change時(shí)觸發(fā).
寫的有點(diǎn)啰嗦,希望你們能看明白.

  validateReceiptNumber = (rule, value, callback) => {
    const { getFieldValue } = this.props.form;
    let startNum = Number.parseInt(getFieldValue('startNum'));
    let endNum = Number.parseInt(getFieldValue('endNum'));
    if(!Number.isNaN(startNum) && !Number.isNaN(endNum) && startNum > endNum){
      callback('開始編號(hào)應(yīng)該小于結(jié)束編號(hào)');
    }
    callback()
  }
<FormItem
  validateStatus={startNumError ? "error" : ""}
  help={startNumError || ""}
>
  {getFieldDecorator("startNum", {
    initialValue: "0",
    rules: [
      { required: true, message: "請(qǐng)輸入開始編號(hào)" },
      { pattern: /^[0-9]*$/ , message: "請(qǐng)輸入數(shù)字" },
      { validator: this.validateReceiptNumber }
    ]
  })(<Input placeholder="開始編號(hào)" />)}
</FormItem>
<FormItem
  validateStatus={endNumError ? "error" : ""}
  help={endNumError || ""}
>
  {getFieldDecorator("endNum", {
    initialValue: "0",
    rules: [
      { required: true, message: "請(qǐng)輸入結(jié)束編號(hào)" },
      { pattern: /^[0-9]*$/ , message: "請(qǐng)輸入數(shù)字" },
      { validator: this.validateReceiptNumber }
    ]
  })(<Input placeholder="結(jié)束編號(hào)" />)}
</FormItem>
回答
編輯回答
初心

兩個(gè)值都放入state里呢?當(dāng)input onchange的時(shí)候setState改變值,然后在shouldComponentupdate里去做你想做的驗(yàn)證。也就是非法提示

2017年3月16日 14:04
編輯回答
拽很帥

你看一下這個(gè)是不是你想要的:參考兩次密碼驗(yàn)證,Password & Confirm Password

2017年6月27日 07:24