İçeriğe atla
devcards.space
ReactFrontend

React Hook Form Nedir? Performant ve Esnek Form Yönetimi

React Hook Form ile daha az re-render, daha az kod ve daha güçlü validation. useForm, Controller, watch ve TypeScript ile entegrasyon rehberi.

7 dakika okuma
React Hook Form infografiği: useForm, validation, controlled components ve TypeScript desteğini gösteren 13 bölümlü genel bakış

React Hook Form, hafif olmasıyla, performansıyla ve TypeScript desteğiyle modern React uygulamalarındaki form yönetiminin de-facto kütüphanesi haline gelen bir araçtır. Geleneksel controlled form yaklaşımının her tuş vuruşunda re-render yaratmasının önüne geçer, ref tabanlı uncontrolled yaklaşımı ile bileşenlerinizi sade tutar. Bu rehberde infografikteki 13 bölümü açarak temel kurulumdan watch/reset gibi ileri özelliklere kadar her şeyi gösteriyoruz.

React Hook Form Nedir?

React'ta form yönetimi için hafif bir kütüphanedir. Daha az re-render, daha az kod, doğal TypeScript desteği ve harici kütüphanelere ihtiyaç duymadan validation imkanı sağlar.

  • Hafif — küçük bundle
  • Daha az re-render → daha iyi performans
  • Sadeleştirilmiş validation
  • Built-in TypeScript desteği

Neden React Hook Form?

Form kütüphanesi seçerken kıymet veren detaylar:

  • Az re-render — yalnızca değişen alanlar render edilir
  • Kolay validation
  • Bağımsız çalışır — başka kütüphane gerekmez
  • Built-in TypeScript desteği
  • Az kod, daha temiz componentler

Daha İyi Performans

Controlled formlarda her tuş vuruşu tüm form'u re-render eder. React Hook Form, ref tabanlı uncontrolled yaklaşımıyla yalnızca gerçekten değişen alanları yeniden render eder; sonuç, daha hızlı UI ve düşük CPU kullanımı.

Temel Kurulum

useForm hook'u tüm form akışınızın merkezidir; register, handleSubmit ve formState kapsamlı API sunar.

components/LoginForm.tsx
tsx
import { useForm } from "react-hook-form";

type FormData = { email: string; password: string };

export function LoginForm() {
  const { register, handleSubmit } = useForm<FormData>();
  const onSubmit = (data: FormData) => console.log(data);

  return (
    <form onSubmit={handleSubmit(onSubmit)}>
      <input {...register("email")} />
      <input type="password" {...register("password")} />
      <button type="submit">Giriş yap</button>
    </form>
  );
}

Temel Form Örneği

register fonksiyonu input'a ad ve ref bağlar; handleSubmit form gönderildiğinde data'yı toplayıp callback'e geçirir.

Validation

Validation kuralları doğrudan register'e parametre olarak verilir: required, minLength, pattern gibi yerleşik kurallar veya custom validate fonksiyonu. Hata mesajlarına formState.errors üzerinden erişilir.

tsx
<input
  {...register("email", {
    required: "Email gerekli",
    pattern: {
      value: /^\S+@\S+$/i,
      message: "Geçersiz email",
    },
  })}
/>
{errors.email && <span>{errors.email.message}</span>}

Form State

formState; errors, isDirty, isSubmitting, touchedFields, isValid gibi kullanışlı durum bilgilerini içerir. UI'ı buna göre koşullandırabilirsiniz.

  • errors — alan bazında hata mesajları
  • isDirty — form değişti mi
  • isSubmitting — submit sürüyor mu
  • touchedFields — dokunulmuş alanlar
  • isValid — tüm validation'lar geçti mi

Controlled Components

Material UI, Chakra UI veya kendi custom input'larınız gibi ref kabul etmeyen bileşenleri kullanmak için Controller bileşeni vardır.

tsx
import { Controller, useForm } from "react-hook-form";

<Controller
  name="country"
  control={control}
  rules={{ required: true }}
  render={({ field }) => <Select {...field} options={options} />}
/>

TypeScript Desteği

useForm jenerik tipini formunuzun şekline ayarlayarak tüm register/setValue/watch çağrılarını tip-güvenli yaparsınız. Otomatik tamamlama hatasız form yapısı kurmanıza yardım eder.

tsx
type Form = { email: string; age: number };
const { register, watch } = useForm<Form>();
watch("email"); // string
watch("age");   // number

Watch & Reset

watch alanların güncel değerini izlemek için, reset formu ilk değerlere veya yeni bir set'e döndürmek için kullanılır. Bağlı UI senaryolarında çok kullanışlıdır.

tsx
const email = watch("email");

reset(); // baştaki değerlere
reset({ email: "ada@dev.com" });

Temel Kavramlar

API'de en sık kullandığınız parçalar:

  • useForm — formun ana hook'u
  • register — input'u forma bağlar
  • handleSubmit — submit pipeline'ı
  • validation — required/min/max/pattern/validate
  • Controller — kontrollü bileşenler için sarmalayıcı
  • watch / reset — gözleme ve sıfırlama

Kullanım Alanları

React Hook Form'un yıldızlandığı senaryolar:

  • Login & register formları
  • Çok adımlı formlar (multi-step)
  • E-ticaret checkout süreçleri
  • Filtre ve arama formları
  • Admin paneli CRUD ekranları

Özet

React Hook Form; hızlı ve hafif form yönetimi sunar, re-render sayısını azaltır ve gelişmiş validation imkânı sağlar. Modern React projelerinde form denildiğinde ilk akla gelen kütüphanedir; özellikle Zod ile birleşince tip-güvenli form akışları çok güçlüdür.

Sıkça Sorulan Sorular

Bu konuda en çok merak edilenler.

React Hook Form ile Formik arasındaki fark nedir?

Formik daha eski ve controlled bir API sunar; her tuş vuruşunda re-render olur. React Hook Form ref tabanlı çalışır, daha az re-render ve daha küçük bundle ile gelir. Yeni projelerde RHF tercih edilir.

Zod ile birlikte nasıl kullanırım?

@hookform/resolvers/zod paketiyle Zod schema'sını resolver olarak useForm'a verirsiniz; tüm validation Zod tarafından yapılır ve tipler otomatik çıkarılır.

Server-side render uyumlu mu?

Evet, Next.js App Router ile sorunsuz çalışır. useForm bir Client Component içinde tanımlanmalıdır; sayfanın geri kalanı Server Component kalabilir.

useFieldArray ne işe yarar?

Dinamik liste alanları (örneğin kullanıcı eklenip çıkarılan formlar) için kullanılır. append, remove, move gibi yardımcılar getirir ve listeyi performanslı tutar.

Async validation yapılabilir mi?

Evet — validate fonksiyonu Promise döndürebilir. Email kullanılabilirliği gibi sunucu doğrulamaları için idealdir; isValidating state'i ile UI'ı yönetebilirsiniz.

Bu konuyla bağlantılı diğer infografikler.

Daha fazla developer infografiği keşfedin

Yeni içerikleri kaçırmamak için ana sayfayı ziyaret edin.

Tüm infografikleri gör