npm install --save use-react-form-hook
import React from 'react' import { useForm } from 'use-react-form-hook'; import { VALIDATOR_REQUIRE, VALIDATOR_MINLENGTH, VALIDATOR_EMAIL, validate } from './utils/validators'; import './index.css'; const App = () => { //Pass all field details in hook const [formState, inputHandler, setFormData] = useForm({ name: { value: '', isValid: false, }, email: { value: '', isValid: false }, address: { value: '', isValid: false } }, false); const changeHandler = (event, valid) => { let { id, value } = event.target; inputHandler(id, value, validate(value, valid)) }; const touchHandler = (id) => { const { name, email, address } = formState.inputs; setFormData( { ...formState.inputs, [id]: { ...formState.inputs[id], isTouched: true }, }, email?.isValid && address?.isValid && name?.isValid ); } const OnFormSubmit = (e) => { e.preventDefault(); console.log(formState.inputs); alert(JSON.stringify(formState.inputs,null,4)) } return ( <div className='form-box'> <form onSubmit={OnFormSubmit}> <div className={`form-control ${!formState?.inputs?.name?.isValid && formState?.inputs?.name?.isTouched && 'form-control--invalid'}`} > <input id="name" type="text" onChange={(e) => { changeHandler(e, [VALIDATOR_REQUIRE()]) }} onBlur={() => { touchHandler('name') }} /> {!formState?.inputs?.name?.isValid && formState?.inputs?.name?.isTouched && <p>Please enter a name.</p>} </div> <div className={`form-control ${!formState?.inputs?.email?.isValid && formState?.inputs?.email?.isTouched && 'form-control--invalid'}`} > <input id="email" type="email" onChange={(e) => { changeHandler(e, [VALIDATOR_EMAIL()]) }} onBlur={() => { touchHandler('email') }} /> {!formState?.inputs?.email?.isValid && formState?.inputs?.email?.isTouched && <p>Please enter a valid email address</p>} </div> <div className={`form-control ${!formState?.inputs?.address?.isValid && formState?.inputs?.address?.isTouched && 'form-control--invalid'}`} > <textarea id="address" onChange={(e) => { changeHandler(e, [VALIDATOR_MINLENGTH(5)]) }} onBlur={() => { touchHandler('address') }} rows="4" /> {!formState?.inputs?.address?.isValid && formState?.inputs?.address?.isTouched && <p>Please enter a valid address (at least 5 character).</p>} </div> <div className='center'> <button disabled={!formState.isValid} type="submit" className='button'>Submit</button> </div> </form > </div > ) } export default App
import React, { useEffect, useState } from 'react' import { useForm } from 'use-react-form-hook'; import { VALIDATOR_REQUIRE, VALIDATOR_MINLENGTH } from './utils/validators'; const EditPage = () => { const [formState, inputHandler, setFormData] = useForm( { name: { value: '', isValid: false }, address: { value: '', isValid: false } }, false ); useEffect(() => { setFormData( { name: { value: 'Jayesh Sojitra', isValid: true }, address: { value: 'Ahmedabad, India', isValid: true } }, true ); }, []) return ( <div className='container'> <div className='main'> <div className='row'> <div className='col-lg-8 mb-20'> <div className='card pitch'> <header className='auth-content'> <h1>Edit Page</h1> </header> <form> <Input id="name" type="text" label="Name" errorText="Please enter a name" validators={[VALIDATOR_REQUIRE()]} onInput={inputHandler} initialValue={formState.inputs.name.value} initialValid={true} /> <Input id="address" type="textarea" label="Address" rows="5" errorText="Please enter a address, at least 10 characters" validators={[VALIDATOR_MINLENGTH(10)]} onInput={inputHandler} initialValue={formState?.inputs?.address?.value} initialValid={true} /> <div className="input-container center"> <Button type="button" disabled={!formState.isValid}> Submit </Button> </div> </form> </div> </div> <div className='col-lg-4 '> <UserWidget user={auth?.user} tags={tags} /> </div> </div> </div> </div> ); } export default EditPage;
MIT Β© jayeshsojitra103
This hook is created using create-react-hook.