React——form的校验和验证规则(使用formik,yup)

React在进行form校验时,有两种方案

  1. 使用组件库进行from表单校验,但是React中组件库用起来比较费力。
  2. 使用原生方法写,这里借助  formik 和  yup进行使用

 一,formik的使用

官方文档https://formik.org/docs/tutorial#validation

  1. 首先进行安装依赖 

yarn add  formik

    2.使用

  •  先导入

import { useFormik } from 'formik';

  • 进行初始化 

initialValues:初始化 输入框的密码和账号 

onSubmit:当点击提交按钮时,调用这个钩子,拿到输入框的vaule值

 这里打印一下 formik可以看到有很多钩子函数可以使用

 

 const formik = useFormik({
        initialValues: {
            mobile: '',
            code: ''
        },
        validate,
        onSubmit: values => {
            // 拿到输入框的值
            console.log(values);
        },
    });
    console.log(formik);
  •  在from表单中绑定这些钩子函数,会自动调用和受控

 

  •   formik中提供了校验规则,但是还是要自己手写,这里了解一下

 进行校验结果的控制

  •     这里看看全部代码
import React from 'react'
import NavBar from '../NavBar/NavBar'
import style from './Login.module.scss'
import Input from '../Input/input.js'
// 导入表单验证的formik
import { useFormik } from 'formik';
//导入校验验证规则yup
//import * as yup from 'yup';
const validate = values => {
    const error = {}
    if (!values.mobile) {
        error.mobile = '手机号不能为空'
    }
    if (!values.code) {
        error.code = '验证码不能为空'
    }
    return error
}
export default function Login() {
    const formik = useFormik({
        initialValues: {
            mobile: '',
            code: ''
        },
        validate,
        onSubmit: values => {
            // 拿到输入框的值
            console.log(values);
        },
    });
    console.log(formik);
    return (
        <div className={style.root}>
            <NavBar>登录</NavBar>
            <div className='content'>
                <h3>短信登录</h3>
                <form onSubmit={formik.handleSubmit}>
                    <div className='input-item'>
                        <Input
                            name='mobile'
                            placeholder='请输入手机号'
                            value={formik.values.mobile}
                            onChange={formik.handleChange}
                            onBlur={formik.handleBlur}
                        />
                        {formik.touched.mobile && formik.errors.mobile ? < div className='validate'>{formik.errors.mobile}</div> : null}

                        <div className='input-item'>
                            <Input
                                placeholder='请输入验证码'
                                extra='获取验证码'
                                name='code'
                                onChange={formik.handleChange}
                                onBlur={formik.handleBlur}
                                value={formik.values.code} />
                            {formik.touched.code && formik.errorscode ? <div className='validate'>{formik.errors.code}</div> : null}
                        </div>
                        <button type='submit' className='login-btn'>登录</button>
                    </div>
                </form>
            </div >
        </div >
    )
}

二,yup

上面的校验规则看起来不是很方便,使用yup会方便很多,可以去官网看看,非常简单。相信都可以看明白

yup:https://www.npmjs.com/package/yup

 

React使用Ant Design Form进行表单校验,若希望阻止用户输入特殊字符并替换为默认值,你可以结合`Input`组件的`onKeyDown`事件和自定义验证规则来实现。首先,创建一个`replaceSpecialChar`函数,用于过滤掉特殊字符: ```jsx const replaceSpecialChar = (event, allowedChars = '') => { const key = event.key; const keyValue = String.fromCharCode(key); if (!allowedChars.includes(keyValue)) { event.preventDefault(); // 阻止键盘输入 event.target.value = keyValue === ' ' ? '' : allowedChars; // 替换为允许的字符或空格 } }; ``` 然后,在`Form.Item`内配置`Input`组件和校验规则: ```jsx import { Form, Input, Button } from 'antd'; const CustomForm = () => { const [allowedChars, setAllowedChars] = useState(''); // 可以根据需求动态设置允许的字符 const handleAllowedCharsChange = (e) => { setAllowedChars(e.target.value); }; const onInputChange = (event) => { replaceSpecialChar(event, allowedChars); }; return ( <Form> {/* 添加允许字符的选择框 */} <Form.Item label="Allowed Characters" name="allowedChars" value={allowedChars} onChange={handleAllowedCharsChange} > <Input placeholder="Enter allowed characters" /> </Form.Item> <FormItem name="inputField" rules={[ { validator: (values, callback) => { const { inputField } = values; if (!allowedChars || !inputField) { callback(); // 如果未设定允许字符,直接通过校验 } else if (inputField.includes(restrictedCharacters(allowedChars))) { callback(new Error('Please enter only allowed characters.')); } else { callback(); } }, trigger: 'change' } ]} extra={<small>Only allow the characters you specified</small>} > <Input onKeyDown={onInputChange} placeholder="Enter your text without special characters" /> </FormItem> {/* ...其他表单元素... */} </Form> ); }; export default CustomForm; ``` 这里,`onInputChange`会在用户输入时实时检查并替换特殊字符。`rules`部分则在`change`事件触发时校验输入内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Mr.指尖舞者

如果帮助到了你,请给点赞助支持

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

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

打赏作者

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

抵扣说明:

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

余额充值