🙆

【Web Library】Nextjs13で覚える便利なライブラリ【#12useFormik Form】

2023/03/08に公開

【#12useFormik Form】

YouTube: https://youtu.be/txIM1sj5sFs

https://youtu.be/txIM1sj5sFs

今回は「useFormik」の設定を使用して、
入力フォームの作成を行います。

「useFormik」を使用して作成した「formik」の中に、
フォームのサブミット用のメソッドや
入力欄の「onChange」のメソッドや「value」の値がありますので、
こちらを設定していきます。

app/formik/hooks/page.tsx
'use client';
import { useFormik } from 'formik';
import * as Yup from 'yup';

const Page = () => {
  const formik = useFormik({
    initialValues: {
      email: '',
      password: '',
    },
    validationSchema: Yup.object({
      email: Yup.string().email('Invalid email address').required('Required'),
      password: Yup.string()
        .min(8, 'パスワードは8文字以上を設定してください')
        .required('Required'),
    }),
    onSubmit: (values) => {
      alert(JSON.stringify(values, null, 2));
    },
  });

  return (
    <div className="text-white">
      <h1 className="mb-4 text-center text-3xl font-bold">
        Any place in your app!
      </h1>
      <form
        onSubmit={formik.handleSubmit}
        className="flex flex-col items-center gap-2"
      >
        <input
          type="email"
          name="email"
          onChange={formik.handleChange}
          onBlur={formik.handleBlur}
          value={formik.values.email}
          className="text-gray-900"
        />
        {formik.touched.email && formik.errors.email ? (
          <div className="text-red-500">{formik.errors.email}</div>
        ) : null}
        <input
          type="password"
          name="password"
          onChange={formik.handleChange}
          onBlur={formik.handleBlur}
          value={formik.values.password}
          className="text-gray-900"
        />
        {formik.touched.password && formik.errors.password ? (
          <div className="text-red-500">{formik.errors.password}</div>
        ) : null}
        <button type="submit">Submit</button>
      </form>
    </div>
  );
};

export default Page;

Discussion