ホームページ > ウェブフロントエンド > jsチュートリアル > useActionState を例で簡単に学習します (Next.js)

useActionState を例で簡単に学習します (Next.js)

Barbara Streisand
リリース: 2024-11-29 04:17:11
オリジナル
819 人が閲覧しました

Learn useActionState quickly with an example (Next.js

フォームを使用する場合、useActionState フックにより、フォーム値を取得し、それを FormData としてサーバー アクションに渡すプロセスが簡素化されます。

useActionState は、サーバー アクションから返された値で状態変数を自動的に更新することによって状態も管理します。これは、Zod を使用した以下の例に示すように、入力フィールド検証エラーをレンダリングする場合に特に役立ちます。

form.tsx:

"use client";

import { useActionState } from "react";
import { signUp } from "../actions";

export default function SignUp() {
  const [state, action] = useActionState(signUp, {});

  return (
    <form action={action}>
      <div>
        <label htmlFor="username">Username:</label>
        <input
          type="text"
         >



<p>actions.ts:<br>
</p>

<pre class="brush:php;toolbar:false">"use server";

import { z } from "zod";

const SignUpSchema = z.object({
  username: z.string(),
  password: z
    .string()
    .min(8, { message: "Be at least 8 characters long" })
    .regex(/[a-zA-Z]/, { message: "Contain at least one letter." })
    .regex(/[0-9]/, { message: "Contain at least one number." })
    .regex(/[^a-zA-Z0-9]/, {
      message: "Contain at least one special character.",
    })
    .trim(),
});

export type SignUpActionState = {
  username?: string;
  password?: string;
  errors?: {
    username?: string[];
    password?: string[];
  };
};

export async function signUp(
  _prevState: SignUpActionState,
  form: FormData
): Promise<SignUpActionState> {
  const username = form.get("username") as string;
  const password = form.get("password") as string;

  const validatedFields = SignUpSchema.safeParse({
    username,
    password,
  });

  if (!validatedFields.success) {
    return {
      username,
      password,
      errors: validatedFields.error.flatten().fieldErrors,
    };
  }

  // process validated form inputs here

  return { username, password };
}
ログイン後にコピー

useActionState は、サーバー アクションの Promise がまだ解決中かどうかを示す isPending プロパティ (例) も返します。

isPending を参照して、送信ボタンなどのフォーム要素を一時的に無効にし、進行中のアクションが完了する前にユーザーが素早く連続して複数回クリックすることを防ぎます。

useActionState と useFormAction および useFormStatus の比較

useFormAction と useFormStatus に慣れている場合は、useActionState が非常に似ていることがわかるでしょう。

基本的に、これは両方のフックの機能を組み合わせたもので、サーバー アクションがフォーム専用ではないことを反映して名前が変更されています (ボタンやその他の要素で useActionState を使用することもできます)

useFormStatus は Next.js 15 の時点で非推奨であるため、今後は useActionState をインポートする必要があることに注意してください。

以上がuseActionState を例で簡単に学習します (Next.js)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート