国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 語(yǔ)言 > JavaScript > 正文

淺析JS中什么是自定義react數(shù)據(jù)驗(yàn)證組件

2024-05-06 15:28:36
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

我們?cè)谧銮岸吮韱翁峤粫r(shí),經(jīng)常會(huì)遇到要對(duì)表單中的數(shù)據(jù)進(jìn)行校驗(yàn)的問(wèn)題。如果用戶提交的數(shù)據(jù)不合法,例如格式不正確、非數(shù)字類型、超過(guò)最大長(zhǎng)度、是否必填項(xiàng)、最大值和最小值等等,我們需要在相應(yīng)的地方給出提示信息。如果用戶修正了數(shù)據(jù),我們還要將提示信息隱藏起來(lái)。

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

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上的說(shuō)明文檔和示例。

但是,如果我們前端使用的是React框架,如何來(lái)實(shí)現(xiàn)和上面knockout類似的功能呢?我們可以考慮將這一相對(duì)獨(dú)立的功能抽出來(lái),寫(xiě)成一個(gè)React組件。看下面的代碼:

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 平武县| 巴里| 和林格尔县| 汨罗市| 盘山县| 山丹县| 林州市| 吉林省| 志丹县| 色达县| 池州市| 加查县| 张家界市| 沛县| 卫辉市| 桦南县| 娱乐| 桑植县| 古交市| 甘肃省| 纳雍县| 江永县| 永善县| 青浦区| 海淀区| 柳江县| 福贡县| 府谷县| 水城县| 依兰县| 玉树县| 寿宁县| 三都| 胶州市| 若羌县| 通州市| 城口县| 嘉鱼县| 时尚| 胶州市| 百色市|