首页 > 语言 > JavaScript > 正文

浅析JS中什么是自定义react数据验证组件

2024-05-06 15:28:36
字体:
来源:转载
供稿:网友

我们在做前端表单提交时,经常会遇到要对表单中的数据进行校验的问题。如果用户提交的数据不合法,例如格式不正确、非数字类型、超过最大长度、是否必填项、最大值和最小值等等,我们需要在相应的地方给出提示信息。如果用户修正了数据,我们还要将提示信息隐藏起来。

有一些现成的插件可以让你非常方便地实现这一功能,如果你使用的是knockout框架,那么你可以借助于Knockout-Validation这一插件。使用起来很简单,例如我下面的这一段代码:

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组件。看下面的代码:

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选