import React, { useEffect } from 'react' import { Button, Form } from 'react-bootstrap' import { useForm } from 'react-hook-form' type FormState = { name: string color: string gender: string } export default function FormDemo() { const { register, handleSubmit, watch } = useForm<FormState>({ defaultValues: { name: '', color: '#c0ffee', gender: '', }, }) useEffect(() => { let sub = watch(data => { console.log('update form data:', data) }) return () => sub.unsubscribe() }, [watch]) function submit(data: FormState) { console.log('submit form data:', data) } return ( <div className="container"> <h1>Form Demo</h1> <Form onSubmit={handleSubmit(submit)}> <Form.Group> <Form.Label>Name</Form.Label> <Form.Control type="text" {...register('name')} /> </Form.Group> <Form.Group> <Form.Label>Color</Form.Label> <Form.Control type="color" {...register('color')} className="d-inline" /> <Form.Text className="text-muted"> Custom the background color </Form.Text> </Form.Group> <Form.Group> <Form.Label>Gender</Form.Label> <Form.Control as="select" custom {...register('gender')}> <option value="">Prefer not to say</option> <option>M</option> <option>F</option> <option>T</option> <option>Others</option> </Form.Control> </Form.Group> <Button variant="primary" type="submit"> Submit </Button> </Form> </div> ) }
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter