React form is a initiative to provide a better form validation and implimentation experience to React developers. See Example
-
Automatic validation,
-
Custom Input, Select, Checkbox, Radio inputs
-
Easy to Implement
-
Almost like HTML Forms and Inputs (No need to learn much of the APIs).
-
Animated Label Inputs.
Step 1. Clone or download the code base.
git clone https://github.com/sharma-dev/react-form.git
or
wget https://github.com/sharma-dev/react-form/archive/master.zip
Step 2. Extract the code Step 3. Put the code in your codebase and use import
import { Form, Input } from "./react-form/src;
Step 4. Setup CSS. Either you can directly import CSS file to your code if you are using modern React and babel tools. (If you create your project via react-create-app you can use direct import) or you can merge the CSS with your default style sheet.
Direct import
import style from './react-form/style.css';
Note: Styles are also provided at the end of this document.
import React, { Component } from "react"; import { Form, Input } from './react-form/src'; import style from "./react-form/style.css"; class RegisterForm extends Component{ render(){ return ( <Form id="my-form" action="some-page.asp" method="post" defaultPrevented={true}> <Input name="name" placeholder="Name" validateOnBlur={true} validation="required"/> <Input type="password" name="password" /> <button> Submit </button> </From> ) } }
1. id (type: string): Form id (Same as html form),
2. className (type: string): Form className (Same as html form),
3. method (type string): Form method (Same as html form),
4. action (type: string): Form action (Same as html form),
5. onSubmit (type: function): onSubmit function to be executed when the form is submited.
6. defaultPrevented (type: bool): If true form submit will be defult prevented (default value false).
7. shouldValidate: If false validation of inputs on submit will not work (default value is true).
8. children (type: React Child Node): React Node Elements for the form can be and JSX and Input Elements supported by default.
1. containerClassName (type string): ClassName of outer container,
2. type (type string): type of input (same as default HTML input)
3. placeholder (type placeholder): Placeholder/(Floating label) for the input,
4. className (type string): input className,
5. name (type string): input name,
6. defaultValue (type string): input deafult value,
7. value (type string): input value,
8. onChange (type function): onChange Event,
9. onBlur (type function): onBlur Event,
10. onFocus (type function): onFocus Event,
11. validation (type string/array): Validation for input. For more details see validation details
Currently, react-form supports only the following validations
required: a required field cannot be empty.
email : validation for email input.
number : validation for numeric value.
min_val : validation to check for minimum value for the input syntax min_val:length
max_val : validation to check for maximum value for the input syntax max_val:length
regex : react-form also accepts custom regex validation to validated custom regex value syntax regex:regex_expression
To use multiple validations on the single input you can use an array of validations.
<Input type="text" placeholder="Validation Example" validation={['required', 'phone', 'min_val:10', "max_val:10"]}>
.rc-input{ position: relative; } .rc-input label { position: relative; text-align: left; margin: 0; margin-top: 10px; height: auto; font-size: 18px; } .rc-input label span { font-size: 1em; font-weight: normal; color: #444; padding: 0; } .rc-input label.input-label-animate span { position: absolute; bottom: -5px; left: 15px; transition: all 0.3s ease-out; } .rc-input label.input-label-animate .label-seprate { bottom: 1.9em; left: 0; font-size: 0.8em; } .rc-input label input:not([type='radio']):not([type='checkbox']) { height: 1.1em; font-size: inherit; border: 0; box-shadow: none; outline: 0; border-bottom: 1px solid; border-radius: 0; font-weight: normal; margin-top: 1.5em; padding: 6px 15px; } .rc-input label input:not([type='radio']):not([type='checkbox']).error_input { border: solid 1.5px #ff5252; border-radius: 5px; } .rc-input label input[type='radio'], .rc-input label input[type='checkbox'] { float: left; margin-right: 5px; margin-top: 1.5px; zoom: 1.3; } .rc-input label i { position: absolute; right: 0px; top: 50%; transform: translateX(-50%); cursor: pointer; } .rc-input input[type=button], .rc-input input[type=reset], .rc-input input[type=submit], .rc-input button.submit { display: inherit; margin: 16px auto 0; display: inherit; border-radius: 0; box-shadow: none; background: #067b98; border: #067b98; outline: #067b98; color: #fff; padding: 12px 15%; } .error-cross-icn span{ position: absolute; background: #fff; z-index: 99; width: 200px; height: auto; display: none; padding: 10px; box-shadow: 0px 0px 6px 1px #bdbdbd; border: solid 1px #bdbdbd; border-radius: 5px; bottom: calc(100% + 10px); } .error-cross-icn span:before{ z-index: 10; border-top-color:#bdbdbd; } .error-cross-icn span:after{ z-index: 11; border-top-color:#fff; } .error-cross-icn:hover > span{ display: flex; justify-content: center; align-items: center; } .error-cross-icn { position: absolute; right: 12px; bottom: 7px; width: 22px; height: 22px; background: #ff5252; border-radius: 50%; display: flex; justify-content: center; align-items: center; } .error-cross-icn:before, .error-cross-icn:after { position: absolute; content: ' '; height: 50%; width: 3px; background-color: #fff; } .error-cross-icn:before { transform: rotate(45deg); } .error-cross-icn:after { transform: rotate(-45deg); }
This is an initial project and has many vulnerabilities. I like to get support and contribution from other developers in making this library a success whereas I'll be giving a good amount of time to the library as well. To contribute simply
Post an Issue
or
Simply fork the project
Make changes
Give me a pull request