React - Required Checkbox Example with React Hook Form
Example built with React 16.13.1 and React Hook Form 6.8.6
Other versions available:
- Angular Reactive Forms: Angular 10
- Angular Template-Driven Forms: Angular 10
- Next.js: Next.js
- React + Formik: Formik 2
- React Hook Form: React Hook Form 7
- Vue + VeeValidate: Vue 3 Composition API, Vue 3 Options API
This is a quick example of how to implement a required checkbox field in React with the React Hook Form library. For a more detailed registration form example that includes a bunch of other fields see React - Form Validation Example with React Hook Form.
Here it is in action: (See on StackBlitz at https://stackblitz.com/edit/react-hook-form-required-checkbox-example)
React Hook Form Required Checkbox App Component
The app component contains an example form built with the React Hook Form library that contains a single required checkbox.
Form validation rules are defined with the Yup schema validation library and passed to the React Hook Form useForm()
function, for more info on Yup see https://github.com/jquense/yup.
The checkbox is set to required with the rule Yup.bool().oneOf([true], 'Accept Ts & Cs is required')
.
The useForm()
hook function returns an object with methods for working with a form including registering inputs, handling form submit, resetting the form, displaying errors and more, for a complete list see https://react-hook-form.com/api#useForm.
The onSubmit()
method is called when the form is valid and submitted, and simply displays the form data in a javascript alert.
The returned JSX template contains the form with the required checkbox field and validation message. The form field is registered with the React Hook Form using the ref={register}
attribute which registers the checkbox with its name
.
import React from 'react'; import { useForm } from "react-hook-form"; import { yupResolver } from '@hookform/resolvers'; import * as Yup from 'yup'; function App() { // form validation rules const validationSchema = Yup.object().shape({ acceptTerms: Yup.bool() .oneOf([true], 'Accept Ts & Cs is required') }); // functions to build form returned by useForm() hook const { register, handleSubmit, reset, errors } = useForm({ resolver: yupResolver(validationSchema) }); function onSubmit(data) { // display form data on success alert('SUCCESS!! :-)\n\n' + JSON.stringify(data, null, 4)); } return ( <div className="card m-3"> <h5 className="card-header">React - Required Checkbox Example with React Hook Form</h5> <div className="card-body"> <form onSubmit={handleSubmit(onSubmit)} onReset={reset}> <div className="form-group form-check"> <input name="acceptTerms" type="checkbox" ref={register} id="acceptTerms" className={`form-check-input ${errors.acceptTerms ? 'is-invalid' : ''}`} /> <label for="acceptTerms" className="form-check-label">Accept Terms & Conditions</label> <div className="invalid-feedback">{errors.acceptTerms?.message}</div> </div> <div className="form-group"> <button type="submit" className="btn btn-primary mr-1">Register</button> <button className="btn btn-secondary" type="reset">Reset</button> </div> </form> </div> </div> ) } export { App };
Need Some React Hook Form Help?
Search fiverr for freelance React Hook Form developers.
Follow me for updates
When I'm not coding...
Me and Tina are on a motorcycle adventure around Australia.
Come along for the ride!