【Next.js】useFormStateとuseFormStatusの違い

Next.jsのuseFormStateuseFormStatusについてまとめました。
間違っていましたらご指摘ください。
どちらもフォームの状態管理に関わるフックですが、
State と Status、似ていますよね。。。

目次

useFormState

useFormState はフォームの状態を管理するためのフックです。
フォームの各フィールドの値やエラー状態などを追跡するのに役立ちます。
一般的にはフォームの各入力フィールドの値やバリデーションエラーを管理するために使用されます。

主な機能

  • フォームの各フィールドの値を管理する。
  • フォームの各フィールドのエラーメッセージを管理する。
  • フォームが送信可能な状態かどうかを判定する。

コード例

'use client' // クライアントコンポーネント

import { useFormState } from 'next/forms';

function MyForm() {
  const { values, errors, handleChange, handleSubmit } = useFormState({
    initialValues: { email: '', password: '' },
    onSubmit: (values) => {
      console.log('Submitted values:', values);
    },
    validate: (values) => {
      const errors = {};
      if (!values.email) {
        errors.email = 'Email is required';
      }
      if (!values.password) {
        errors.password = 'Password is required';
      }
      return errors;
    },
  });

  return (
    <form onSubmit={handleSubmit}>
      <div>
        <label>Email:</label>
        <input
          type="email"
          name="email"
          value={values.email}
          onChange={handleChange}
        />
        {errors.email && <span>{errors.email}</span>}
      </div>
      <div>
        <label>Password:</label>
        <input
          type="password"
          name="password"
          value={values.password}
          onChange={handleChange}
        />
        {errors.password && <span>{errors.password}</span>}
      </div>
      <button type="submit">Submit</button>
    </form>
  );
}

useFormStatus

useFormStatus はフォームの送信状態を管理するためのフックです。
フォームの送信中、送信成功、送信失敗などの状態を追跡するのに役立ちます。

主な機能

  • フォームが送信中かどうかを管理する。
  • フォームが送信成功したかどうかを管理する。
  • フォームが送信失敗したかどうかを管理する。

コード例

'use client' // クライアントコンポーネント

import { useFormStatus } from 'next/forms';

function MyForm() {
  const { isSubmitting, isSuccess, isError, handleSubmit } = useFormStatus({
    onSubmit: async (values) => {
      // 送信処理
      try {
        await submitForm(values);
      } catch (error) {
        // エラーハンドリング
      }
    },
  });

  return (
    <form onSubmit={handleSubmit}>
      {/* フォームフィールド */}
      <button type="submit" disabled={isSubmitting}>
        {isSubmitting ? 'Submitting...' : 'Submit'}
      </button>
      {isSuccess && <div>Form submitted successfully!</div>}
      {isError && <div>There was an error submitting the form.</div>}
    </form>
  );
}

まとめ

  • useFormState は、フォームの各フィールドの値やエラー状態を管理するためのフックです。
  • useFormStatus は、フォームの送信状態を管理するためのフックです。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

いしとぅのアバター いしとぅ ITフリーランス

新卒でIT企業就職し、8年後フリーランスになりました。得意な言語はC#。今後はReactなどフロントエンドに携わるべく日々勉強中。
プログラミングやIT以外の学んだ事など発信します。
↓よければ、以下のSNSアイコンからフォローお願いします。

目次