34
loading...
This website collects cookies to deliver better user experience
npx create-next-app nextjs-formik &&
cd nextjs-formik && npm i formik && npm i yup
mkdir components && cd components && mkdir Form && cd Form && touch InputField.js && touch LoginForm.js && FormLabel.js && mkdir validation && cd validation && touch loginSchema.js
export const InputField = ({ id, type, style, onChange }) => (
<>
<input id={id} type={type} onChange={onChange} style={style}></input>
</>
)
export const FormLabel = ({ text, style }) => (
<>
<label style={style}>{text}</label>
</>
)
import { useFormik } from 'formik'
import { InputField } from './InputField'
import { FormLabel } from './FormLabel'
//import { loginSchema } from './validation/loginSchema'
const LoginForm = () => {
const formik = useFormik({
initialValues: {
email: '',
password: '',
},
//validationSchema: loginSchema,
onSubmit: (values) => {
// Once form submited ex. {Email: '[email protected]', Password: 'secret'}
},
})
return (
<>
<form id='loginform' onSubmit={formik.handleSubmit}>
<FormLabel text='Email: ' />
<InputField
id='email'
name='email'
onChange={formik.handleChange}
style={{ backgroundColor: 'gray' }}
/>
<FormLabel style={{ color: 'red' }} text={formik.errors.email} />
<br></br>
<FormLabel text='Password: ' />
<InputField
id='password'
onChange={formik.handleChange}
/>
<FormLabel style={{ color: 'red' }} text={formik.errors.password} />
</form>
<button form='loginform' type='submit'>
Login
</button>
</>
)
}
export default LoginForm
import * as Yup from 'yup'
export const loginSchema = Yup.object().shape({
email: Yup.string().email().required('Required'),
password: Yup.string().required('Required').min(3, 'Too Short!'),
})
// import { loginSchema } from './validation/loginSchema'
// validationSchema: loginSchema
import LoginForm from '../components/Form/LoginForm'
export default function Home() {
return (
<div>
<LoginForm />
</div>
)
}