Using Material UI with React Hook Form
import TextField from "@material-ui/core/TextField";
import React, { useState } from "react";
import { Button, Paper } from "@material-ui/core";
import { Controller, useForm } from "react-hook-form";
export const FormWithHookForm = () => {
const { handleSubmit, reset, control } = useForm();
const onSubmit = (data: any) => console.log(data);
return (
<form>
<Controller
name={"textValue"}
control={control}
render={({ field: { onChange, value } }) => (
<TextField onChange={onChange} value={value} label={"Text Value"} />
)}
/>
<Button onClick={handleSubmit(onSubmit)}>Submit</Button>
<Button onClick={() => reset()} variant={"outlined"}>Reset</Button>
</form>
);
}
React-hook-form with Mui Examples
Using React Hook Form with Material-UI Components
import React from 'react';
import { makeStyles } from '@material-ui/core';
import TextField from '@material-ui/core/TextField';
import Button from '@material-ui/core/Button';
import { useForm, Controller } from 'react-hook-form';
const useStyles = makeStyles(theme => ({
root: {
display: 'flex',
flexDirection: 'column',
justifyContent: 'center',
alignItems: 'center',
padding: theme.spacing(2),
'& .MuiTextField-root': {
margin: theme.spacing(1),
width: '300px',
},
'& .MuiButtonBase-root': {
margin: theme.spacing(2),
},
},
}));
const Form = ({ handleClose }) => {
const classes = useStyles();
const { handleSubmit, control } = useForm();
const onSubmit = data => {
console.log(data);
};
return (
<form className={classes.root} onSubmit={handleSubmit(onSubmit)}>
<Controller
name="firstName"
control={control}
defaultValue=""
render={({ field: { onChange, value }, fieldState: { error } }) => (
<TextField
label="First Name"
variant="filled"
value={value}
onChange={onChange}
error={!!error}
helperText={error ? error.message : null}
/>
)}
rules={{ required: 'First name required' }}
/>
<Controller
name="lastName"
control={control}
defaultValue=""
render={({ field: { onChange, value }, fieldState: { error } }) => (
<TextField
label="Last Name"
variant="filled"
value={value}
onChange={onChange}
error={!!error}
helperText={error ? error.message : null}
/>
)}
rules={{ required: 'Last name required' }}
/>
<Controller
name="email"
control={control}
defaultValue=""
render={({ field: { onChange, value }, fieldState: { error } }) => (
<TextField
label="Email"
variant="filled"
value={value}
onChange={onChange}
error={!!error}
helperText={error ? error.message : null}
type="email"
/>
)}
rules={{ required: 'Email required' }}
/>
<Controller
name="password"
control={control}
defaultValue=""
render={({ field: { onChange, value }, fieldState: { error } }) => (
<TextField
label="Password"
variant="filled"
value={value}
onChange={onChange}
error={!!error}
helperText={error ? error.message : null}
type="password"
/>
)}
rules={{ required: 'Password required' }}
/>
<div>
<Button variant="contained" onClick={handleClose}>
Cancel
</Button>
<Button type="submit" variant="contained" color="primary">
Signup
</Button>
</div>
</form>
);
};
export default Form;
React Hook Form V7 with Material UI and Typescript Tutorial | Part 1 -- Setup
leoroese/reacthookform-v7-ts-materialui-tutorial at part1
React, Material UI and React Hook Form: Login and Signup Forms