Validasi Formik dengan Zod pada Aplikasi React
Zod
Zod adalah library validasi untuk typescript.
Formik
Formik adalah library untuk membuat form yang memudahkan developer untuk menghandle state dan form submit.
Di tutorial ini kita akan menggunakan Zod untuk memvalidasi input dari Formik. Contoh yang digunkan adalah form registrasi.
Zod schema
Schema inilah yang menjadi aturan validasi.
export const registrationSchema = z.object({
email: z.string().email(),
password: z.string().min(8),
});
Properti email
harus memiliki format email yang valid. Dan properti password
harus memiliki panjang minimal 8 karakter.
Type Inference
meng-infer type yang akan digunakan oleh formik.
export const RegistrationInput = z.infer<typeof RegistrationSchema>;
Form Registrasi
const RegistrationForm = () => (
const initialValues: RegistrationInput = { email: "", password: "" };
<div>
<Formik
initialValues={initialValues}
validate={(values) => {
try {
registrationSchema.parse(values);
} catch (error) {
console.log(error);
return error.formErrors.fieldErrors;
}
}}
onSubmit={(values, { setSubmitting }) => {
// kirim data ke backend...
}}
>
{({
values,
errors,
touched,
handleChange,
handleBlur,
handleSubmit,
isSubmitting,
}) => (
<form onSubmit={handleSubmit}>
<input
type="email"
name="email"
onChange={handleChange}
onBlur={handleBlur}
value={values.email}
/>
{errors.email && touched.email && errors.email}
<input
type="password"
name="password"
onChange={handleChange}
onBlur={handleBlur}
value={values.password}
/>
{errors.password && touched.password && errors.password}
<button type="submit" disabled={isSubmitting}>
Submit
</button>
</form>
)}
</Formik>
</div>
);
Perhatikan bagian ini!
validate={(values) => {
try {
registrationSchema.parse(values);
} catch (error) {
console.log(error);
return error.formErrors.fieldErrors;
}
}}
registrationSchema
melakukan parsing pada data yang disubmit ke Formik.
Apabila data tidak valid maka Zod akan men-throw error dan akan di-catch. Di
blok catch kita perlu mereturn error.formErrors.fieldErrors
agar dapat
diterima oleh Formik.