前端策略模式:react hooks 表单验证

本文介绍了如何在React Hooks中应用策略模式进行表单验证,避免使用多重条件判断。通过封装校验策略,实现对表单字段的单独或组合校验,并通过示例展示了如何在实际react应用中使用该校验器,提高代码的可维护性和复用性。
摘要由CSDN通过智能技术生成

react hooks 表单验证—策略模式

1.前置知识概述

  • 策略模式的定义

定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换,策略模式的目的就是将算法的使用与算法的实现分离开来,避免使用多重条件判断
策略类封装了具体的算法,并负责具体的计算过程。第二个部分是环境类Context,Context 接受客户的请求,随后把请求委托给某一个策略类。

2.背景

  • 在日常的需求开发中避免不了各种表单的校验,非空,长度,最大最小值等等,可能很多同学为了编写方便会通过多个if…else 来判断不同的校验逻辑。
  • 比如现在提一个简单的需求,需要用户输入姓名、年龄、日期,姓名不能为空并且长度不能超过10,年龄不能为空,日期可以为空但能超过当前时间。如果校验失败需要toast提示,(注:姓名如果校验失败需要将label标红)
  • 在上述这样简单的场景下,方便起见可能就会这样处理,但是一般的校验都会伴随着各种响应,当逻辑复杂时,各种条件分支,校验和业务逻辑混杂在一起,就会非常难以维护,并且不同页面可能会有相同的校验逻辑无法进行抽离复用造成很多重复代码
  const submit = () => {
   
    const {
   
      age,
      name,
      date
    } = formData;

    if (!name) {
   
      console.log('将label变为红色');
      return  toast('姓名不能为空');
    }

    if (name.length > 10) {
   
      console.log('将label变为红色');
      return  toast('姓名长度不能超过10');
    }
  
    if (!age) {
   
      return toast('年龄不能为空');
    }

    if (date) {
   
      const dateVal = new Date(date);
      const dateMax = new Date();

      if (dateVal > dateMax) {
   
        return toast('不能大于当前日期');
      }
    }
  }

3.校验器的功能

  • 开始编码之前需要清楚的是,我们预期它有什么功能,知道需要什么才能去设计去开发。很多同学写程序没有思路就在于没有想好自己想要的功能,或者使用方式。

  • 校验器的作用
    1.封装校验逻辑,相同场景可复用,并且职责单一,用来判断属性值是否合法。

  • 需要实现的功能
    1.支持对属性添加单个规则,或者多个对规则
    2.支持对检测到的非法值执行相应的回调

  • 使用方式:

// 对属性只加多个校验规则 对name的值进行校验 校验是否为空 长度是否超过10
validator.add(formDate.name, [
  {
   
    type: TYPES.isEmpty,
    rules: {
   
      errorMsg: '姓名不能为空',
      errCallBack: (errMsg) => {
   console.log(errMsg, '校验失败的回调 处理name的label变红色')}
    }
  },{
   
    type: TYPES.maxLength,
    rules: {
   
      errorMsg: '姓名长度不能超过10',
      maxlength: 10
    }
  }
]);

// 对属性值加单个校验规则 校验age是否为空
validator.add(formDate.age, [
  {
   
    type: TYPES.isEmpty,
    rules: {
   
      errorMsg: '年龄不能为空'
    }
  }
]);

// 开始校验
const errorMsg = validator.start();

// 判断是否通过校验
if 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木木林_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值