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.
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.
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.
<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.
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.
type Form = { email: string; age: number };
const { register, watch } = useForm<Form>();
watch("email"); // string
watch("age"); // numberWatch & 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.
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.
İlgili İçerikler
Bu konuyla bağlantılı diğer infografikler.
- ReactFrontend
React Query Nedir? Axios ve TypeScript ile Mutation Rehberi
React Query (TanStack Query) ile Axios baseURL ayarı, login mutation, create user ve update user hook'larını TypeScript ile kurun.
- ReactFrontend
Next.js Nedir? Production için React Framework'ü
Next.js (App Router) ile fullstack React uygulamaları geliştirin. SSR, SSG, ISR, API routes, Server Components ve performans avantajlarının pratik rehberi.
- ReactFrontend
Zustand Nedir? Basit, Hızlı, Ölçeklenebilir State Management
Zustand ile sıfır boilerplate'e yakın global state yönetimi. Store oluşturma, selectors, async actions, persist middleware ve TypeScript desteği.
Daha fazla developer infografiği keşfedin
Yeni içerikleri kaçırmamak için ana sayfayı ziyaret edin.
Tüm infografikleri gör