# react-validate-framework **Repository Path**: MinJieLiu/react-validate-framework ## Basic Information - **Project Name**: react-validate-framework - **Description**: 一个轻量、简单、易用的 React 表单验证组件 - **Primary Language**: JavaScript - **License**: MIT - **Default Branch**: master - **Homepage**: https://minjieliu.github.io/react-validate-framework/ - **GVP Project**: No ## Statistics - **Stars**: 16 - **Forks**: 11 - **Created**: 2016-12-29 - **Last Updated**: 2024-07-01 ## Categories & Tags **Categories**: react-extensions **Tags**: None ## README # react-validate-framework 一个轻量、简单、易用的 `React` 表单验证组件 [](https://www.npmjs.com/package/react-validate-framework) [](https://travis-ci.org/MinJieLiu/react-validate-framework) [](https://coveralls.io/github/MinJieLiu/react-validate-framework?branch=master) [](https://github.com/MinJieLiu/react-validate-framework) Demo: [https://minjieliu.github.io/react-validate-framework](https://minjieliu.github.io/react-validate-framework) ### 特性 1. 轻量的体积 1. 亲和的 API 1. 内置常用验证方法 1. 动态的验证 1. 多表单组合 1. 自定义规则 1. 基于 `async` 语法,优雅的异步验证 ## 开始使用 npm i react-validate-framework --save 引入: ```js import formConnect, { Checkbox, Radio, Select, Text, Textarea, Message, } from 'react-validate-framework'; ``` 验证规则像这样: ```js const schemas = { email: { rules: 'required | isEmail | maxLength(32) | validateFromServer', messages: '不能为空 | 请输入有效的电子邮件地址 | 不能超过{{param}}个字符 | 邮箱被占用', }, hobby: { rules: 'requiredField(email) | selectLimit(2)', messages: '邮件和爱好至少填写一项 | 至少选择{{param}}项', }, }; const methods = { selectLimit(field, param) { if (Array.isArray(field.value)) { return field.value.length >= param; } return false; }, requiredField(field, param) { const otherField = this.fields[param]; return this.required(field) || (otherField.result && this.required(otherField)); }, async validateFromServer(field, param) { return await doServerAPI(); }, }; ``` * 验证规则和扩展方法不是必需 表单: ```js @formConnect(schemas, methods) export default class BasicForm extends React.Component { static propTypes = { formControl: PropTypes.object, }; constructor(props) { super(props); props.formControl.init({ email: '', phone: '', }, { static: 'form-control', success: 'valid-success', error: 'valid-error', }); } handleSubmit = async () => { const { formControl } = this.props; if (await formControl.validate()) { // Submit. } }; render() { return (