Rumah > hujung hadapan web > tutorial js > Ketahui useActionState dengan cepat dengan contoh (Next.js

Ketahui useActionState dengan cepat dengan contoh (Next.js

Barbara Streisand
Lepaskan: 2024-11-29 04:17:11
asal
819 orang telah melayarinya

Learn useActionState quickly with an example (Next.js

Apabila menggunakan borang, cangkuk useActionState memudahkan proses menangkap nilai borang dan menghantarnya kepada tindakan pelayan sebagai FormData.

useActionState juga mengurus keadaan dengan mengemas kini pembolehubah keadaan secara automatik dengan nilai yang dikembalikan daripada tindakan pelayan. Ini amat membantu untuk memaparkan ralat pengesahan medan input, seperti yang ditunjukkan dalam contoh di bawah menggunakan 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 };
}
Salin selepas log masuk

useActionState juga mengembalikan sifat isPending (contoh) yang menunjukkan sama ada janji tindakan pelayan masih diselesaikan.

Reference isPending untuk melumpuhkan sementara elemen borang, seperti butang serah, untuk menghalang pengguna daripada mengkliknya beberapa kali berturut-turut sebelum tindakan yang sedang berjalan selesai.

useActionState vs useFormAction dan useFormStatus

Jika anda biasa dengan useFormAction dan useFormStatus, anda akan mendapati useActionState agak serupa.

Pada asasnya, ia menggabungkan kefungsian kedua-dua cangkuk dan dinamakan semula untuk menggambarkan bahawa tindakan pelayan bukan hanya untuk borang (anda juga boleh menggunakan useActionState dengan butang dan elemen lain.)

Perlu diingat bahawa useFormStatus telah ditamatkan pada Next.js 15, jadi anda harus mengimport useActionState ke hadapan.

Atas ialah kandungan terperinci Ketahui useActionState dengan cepat dengan contoh (Next.js. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan