ErlangFormDocs v1.0.0
Panduan integrasi

Validasi dan submit

Menghubungkan Zod, state form, reset, dan penyimpanan data.

ErlForm membaca schema untuk membuat UI. Validasi dipasang terpisah pada useForm; lihat contoh lengkap.

const form = useForm({
  defaultValues,
  validators: { onChange: schema, onSubmit: schema },
  onSubmit: async ({ value }) => {
    const parsed = schema.safeParse(value);
    if (!parsed.success) return;
    const response = await fetch("/api/profile", {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify(parsed.data),
    });
    if (!response.ok) throw new Error("Penyimpanan gagal");
  },
});

Siapkan schema dan defaultValues terlebih dahulu serta buat endpoint aplikasi sendiri. Tangani kegagalan request dengan state pesan agar pengguna bisa mencoba kembali; contoh error server menunjukkan alur lengkap.

Nilai awal dan transform

defaultValues perlu mengikuti bentuk input UI: string, boolean, object, array, File, atau Date. .default() dan .catch() pada schema tidak otomatis diterapkan ke state. Validator tidak menjamin nilai callback submit sudah ditransformasi; panggil schema.parse/safeParse secara eksplisit ketika membutuhkan output transform.

Untuk schema dengan input dan output berbeda, bedakan z.input dan z.output di aplikasi. Pipeline diinferensikan dari sisi input; fieldConfig mengikuti tipe state input. Lihat dukungan schema.

Error dan kondisi

Error field ditampilkan dari pesan pertama pada meta.errors dan dinormalisasi dari string, Error, atau object dengan message. requiredIf mengatur UI, bukan aturan Zod. Field tersembunyi, disabled, dan readonly tetap berada di state dan dapat divalidasi. Terapkan aturan kondisional pada schema.

Number yang dikosongkan menjadi undefined. .optional() tidak membuat string kosong menjadi undefined. Sesuaikan aturan dengan nilai yang dihasilkan input.

Reset dan edit data

Gunakan form.reset() untuk kembali ke defaultValues, atau form.reset(data) setelah data edit diterima. Pastikan data dari API sudah sesuai bentuk UI, terutama Date dan array. Gunakan tombol reset bertipe button agar tidak mengirim form.

Renderer native 1.0.0 belum meneruskan handleBlur secara umum. Pilih validasi onChange/onSubmit, atau custom input untuk alur onBlur/touched. Gunakan form.Subscribe untuk menampilkan isSubmitting/canSubmit dan mencegah pengiriman berulang.

Contoh penggunaan

Gunakan form dari useForm. Lihat persiapan awal.

example.tsx
const schema = z.object({ name: z.string().min(2) });

const form = useForm({
  defaultValues: { name: "" },
  validators: { onChange: schema },
});

<ErlForm form={form} schema={schema} />

Di halaman ini