亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

js中自定義react數據驗證組件實例詳解

2024-05-06 16:46:30
字體:
來源:轉載
供稿:網友

我們在做前端表單提交時,經常會遇到要對表單中的數據進行校驗的問題。如果用戶提交的數據不合法,例如格式不正確、非數字類型、超過最大長度、是否必填項、最大值和最小值等等,我們需要在相應的地方給出提示信息。如果用戶修正了數據,我們還要將提示信息隱藏起來。

  有一些現成的插件可以讓你非常方便地實現這一功能,如果你使用的是knockout框架,那么你可以借助于Knockout-Validation這一插件。使用起來很簡單,例如我下面的這一段代碼:

js;" style="margin: 3px auto 0px; padding: 0px 0px 0px 5px; outline: none; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; width: 640px; line-height: 20px; clear: both; border-left: 3px solid rgb(108, 226, 108);">ko.validation.locale('zh-CN');ko.validation.rules['money'] = {  validator: function (val) {    if (val === '') return true;    return /^/d+(/./d{1,2})?$/.test(val);  },  message: '輸入的金額不正確'};ko.validation.rules['moneyNoZero'] = {  validator: function (val) {    if (val === '') return true;    return isNaN(val) || val != 0;  },  message: '輸入的金額不能為0'};ko.validation.registerExtenders();var model = {  MSRP: ko.observable(0),  price: ko.observable().extend({ required: true, number: true, min: 10000, money: true, moneyNoZero: true }),  licence_service_fee: ko.observable().extend({ required: true, money: true }),  purchase_tax: ko.observable().extend({ required: true, money: true }),  vehicle_tax: ko.observable().extend({ required: true, money: true }),  insurance: ko.observable().extend({ required: true, money: true }),  commercial_insurance: ko.observable().extend({ required: true, money: true }),  mortgage: ko.observable(''),  interest_discount: ko.observable(''),  allowance: ko.observable().extend({ money: true }),  special_spec_fee_explain: ko.observable(''),  has_extra_fee: ko.observable(false),  is_new_energy: ko.observable(false)};model.extra_fee_explain = ko.observable().extend({  required: {    onlyIf: function () {      return model.has_extra_fee() === true;    }  }});model.extra_fee = ko.observable().extend({  required: {    onlyIf: function () {      return model.has_extra_fee() === true;    }  },  money: {    onlyIf: function () {      return model.has_extra_fee() === true;    }  }});model.new_energy_allowance_explain = ko.observable().extend({  required: {    onlyIf: function () {      return model.is_new_energy() === true;    }  }});model.total_price = ko.computed(function () {  var _total = Number(model.price()) + Number(model.licence_service_fee()) +    Number(model.purchase_tax()) + Number(model.vehicle_tax()) +    Number(model.insurance()) + Number(model.commercial_insurance());  if (model.has_extra_fee()) {    _total += Number(model.extra_fee());  }  if (model.is_new_energy()) {    _total -= Number(model.new_energy_allowance());  }  return isNaN(_total) ? '0' : _total.toFixed(2).replace(/(/.0*$)|(0*$)/, '');});model.errors = ko.validation.group(model);ko.applyBindings(model);

  更多使用方法可以查看github上的說明文檔和示例。

  但是,如果我們前端使用的是React框架,如何來實現和上面knockout類似的功能呢?我們可以考慮將這一相對獨立的功能抽出來,寫成一個React組件。看下面的代碼:

class ValidationInputs extends React.Component { constructor(props) {  super(props);  this.state = {   isValid: true,   required: this.props.required,   number: this.props.number,   min: this.props.min,   max: this.props.max,   money: this.props.money,   data: null,   errors: ""  } } componentWillReceiveProps(nextProps) {  var that = this;  if (this.state.data !== nextProps.data) {   return setStateQ({data: nextProps.data}, this).then(function () {    return that.handleValidation();   });  } } handleValidation() {  var fields = this.state.data;  // required validation  if(this.state.required && isNilOrEmpty(fields)){   return setStateQ({errors: '必須填寫', isValid: false}, this);  }  // number validation  if (this.state.number) {   if (isNaN(fields)) {    return setStateQ({errors: '請輸入數字', isValid: false}, this);   }   if (!isNilOrEmpty(this.state.min) && !isNaN(this.state.min) && Number(this.state.min) > Number(fields)) {    return setStateQ({errors: '輸入值必須大于等于' + this.state.min, isValid: false}, this);   }   if (!isNilOrEmpty(this.state.max) && !isNaN(this.state.max) && Number(this.state.max) < Number(fields)) {    return setStateQ({errors: '輸入值必須小于等于' + this.state.max, isValid: false}, this);   }  }  // money validation  if (this.state.money) {   if (fields.length > 0 && !/^/d+(/./d{1,2})?$/.test(fields)) {    return setStateQ({errors: '輸入的金額不正確', isValid: false}, this);   }  }  return setStateQ({errors: '', isValid: true}, this); } render() {  return <span className="text-danger">{this.state.errors}</span> }}

  該組件支持的驗證項有:

•required:true | false 檢查是否必填項。
•number:true | false 檢查輸入的值是否為數字。 ?如果number為true,可通過max和min來驗證最大值和最小值。max和min屬性的值都必須為一個有效的數字。

•money:true | false 驗證輸入的值是否為一個有效的貨幣格式。貨幣格式必須為數字,最多允許有兩位小數。

  如何使用?

  我們在父組件的render()方法中加入該組件的引用:

<div className="item">  <div className="col-xs-4">凈車價:</div>  <div className="col-xs-7">    <input type="text" className="form-control" placeholder="0" value={this.state.price} onChange={this.changePrice.bind(this)}/>    <ValidationInputs ref="validation1" data={this.state.price} required="true" number="true" min="10000" max="99999999" money="true"/>  </div>  <div className="col-xs-1 text-center">元</div>  <div className="clear"></div></div>

  我們將price變量加到父組件的state中,并給input控件綁定onChange事件,以便用戶在修改了文本框中的內容時,price變量的值可以實時傳入到ValidationInputs組件中。這樣,ValidationInputs組件就可以立即通過自己的handleValidation()方法對傳入的數據按照預先設定的規則進行驗證,并決定是否顯示錯誤信息。

  注意,這里我們在引用ValidationInputs組件時,設置了一個ref屬性,這是為了方便在父組件中獲得ValidationInputs組件的驗證結果(成功或失?。?。我們可以在父組件中通過下面這個方法來進行判斷(假設父組件中引用了多個ValidationInputs組件,并且每個引用都設置了不同的ref值):

// 父組件調用該方法來判斷所有的輸入項是否合法checkInputs() {  for (var r in this.refs) {    var _ref = this.refs[r];    if (_ref instanceof ValidationInputs) {      if (!_ref.state.isValid) return false;    }  }  return true;}

   這樣,我們在父組件提交數據之前,可以通過這個方法來判斷所有的數據項是否都已經通過驗證,如果未通過驗證,則不提交表單。

  其它幾個基于React的數據驗證組件,不過貌似都是server端使用的:

  https://github.com/edwardfhsiao/react-inputs-validation

  https://github.com/learnetto/react-form-validation-demo

  https://learnetto.com/blog/how-to-do-simple-form-validation-in-reactjs

總結

以上所述是小編給大家介紹的js中自定義react數據驗證組件實例詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久久久久综合| 国产91色在线| 中国china体内裑精亚洲片| 最近2019中文免费高清视频观看www99| 黄色成人在线播放| 国产欧美精品在线播放| 5566成人精品视频免费| 国产精品欧美激情在线播放| 国产在线精品一区免费香蕉| 97精品国产97久久久久久| 国内外成人免费激情在线视频| 亚洲国产成人精品电影| 久久精品国产亚洲精品| 亚洲欧美国产精品专区久久| 欧美成人午夜影院| 国产精品一区二区av影院萌芽| 国产人妖伪娘一区91| 91精品啪在线观看麻豆免费| 亚洲国产精品网站| 久久久久久久久久久91| 91精品国产成人| 久久国产一区二区三区| 久久久久久久999精品视频| 91亚洲国产精品| 欧美天堂在线观看| 26uuu亚洲伊人春色| 色吧影院999| 欧美日韩高清区| 欧美精品www在线观看| 欧美成人激情在线| 韩国国内大量揄拍精品视频| 亚洲国产精品久久| 日韩美女免费视频| 动漫精品一区二区| 91啪国产在线| 国产成人avxxxxx在线看| 久久久免费高清电视剧观看| 久久精品这里热有精品| 久久99精品视频一区97| 欧美黑人国产人伦爽爽爽| 国产91在线高潮白浆在线观看| 亚洲电影免费在线观看| 色一情一乱一区二区| 欧美性猛交xxxx富婆弯腰| 久久中文久久字幕| 欧美精品久久久久久久久久| 中文字幕亚洲欧美日韩高清| 亚洲美女性生活视频| 国产福利成人在线| 九九热这里只有精品免费看| 久久精品视频中文字幕| 国产精品一区二区久久精品| 成人免费看片视频| 亚洲自拍中文字幕| 精品久久久在线观看| 久久久久久九九九| 91久久久久久国产精品| 欧美人与性动交a欧美精品| 日韩欧美福利视频| 2020欧美日韩在线视频| 国产99久久精品一区二区| 国产成人精品电影久久久| 欧美性极品xxxx娇小| 成人午夜在线影院| 中日韩午夜理伦电影免费| 98精品国产高清在线xxxx天堂| 亚洲视频在线免费观看| 一区二区亚洲精品国产| 欧美日韩国产91| 在线观看国产精品淫| 国产中文欧美精品| 国产精品视频一区国模私拍| 国产美女搞久久| 国产精品美腿一区在线看| 26uuu久久噜噜噜噜| 亚洲97在线观看| 91精品久久久久久久久久久久久久| 久久精品国产久精国产一老狼| www.亚洲男人天堂| 久久精品在线播放| 国产精品com| 日韩在线视频免费观看高清中文| 欧美激情乱人伦| 国产亚洲a∨片在线观看| 亚洲精品乱码久久久久久金桔影视| 精品视频一区在线视频| 久久久噜噜噜久久中文字免| 欧美高清不卡在线| 精品国产乱码久久久久久婷婷| 国产成人精品国内自产拍免费看| 国产一区二区丝袜高跟鞋图片| 亚洲毛片在线观看.| 欧美裸体xxxx极品少妇软件| 中文字幕国内精品| 国产免费一区二区三区在线观看| 日韩三级成人av网| 国产精品色婷婷视频| 亚洲韩国青草视频| 亚洲国产美女久久久久| 欧美精品情趣视频| 最近2019年中文视频免费在线观看| 亚洲欧美国产精品久久久久久久| 欧美成人激情视频免费观看| 夜夜嗨av一区二区三区四区| 国产有码在线一区二区视频| 国产美女精品免费电影| 精品在线小视频| 欧美高清视频免费观看| 亚洲人成77777在线观看网| 亚洲精品国产欧美| 欧美大荫蒂xxx| 最新69国产成人精品视频免费| 久久久久久国产免费| 国自在线精品视频| 色噜噜亚洲精品中文字幕| 亚洲人a成www在线影院| 亚洲美腿欧美激情另类| 97碰碰碰免费色视频| 亚洲激情久久久| 奇门遁甲1982国语版免费观看高清| 欧美人与性动交| 欧美日韩另类在线| 亚洲无限乱码一二三四麻| 伊人亚洲福利一区二区三区| 97免费在线视频| 欧美成人合集magnet| 日韩中文字幕在线精品| 精品日韩中文字幕| 亚洲jizzjizz日本少妇| 在线视频日本亚洲性| 91亚洲国产精品| 日本19禁啪啪免费观看www| 中文字幕在线看视频国产欧美在线看完整| 精品高清美女精品国产区| 宅男66日本亚洲欧美视频| 91亚洲精华国产精华| 色婷婷综合成人av| 91精品久久久久久久久久另类| 高潮白浆女日韩av免费看| 91色琪琪电影亚洲精品久久| 国产精品美女久久久久久免费| 欧美极品少妇xxxxⅹ免费视频| 国产亚洲精品一区二555| 亚洲在线第一页| 欧美极品少妇xxxxx| 亚洲乱码一区av黑人高潮| 国产97在线播放| 777777777亚洲妇女| 91天堂在线观看| 日韩av理论片| 九九视频直播综合网| 中文字幕在线成人| 国产欧美日韩亚洲精品| 一个人看的www欧美| 亚洲黄色av网站| 国产精品久久久999| 热久久视久久精品18亚洲精品| 国产视频精品免费播放| 国产男女猛烈无遮挡91| 久久成人18免费网站| 亚洲欧美日韩中文在线制服| 亚洲国产成人久久综合一区| 亚洲老头同性xxxxx| 欧美黄色三级网站|