Menu

React Hook'ları: Canlı Örneklerle Tüm Hook'lar

Hook, adı use ile başlayan ve bir bileşenin state, context, ref ya da efekt gibi bir React özelliğini kullanmasını sağlayan bir fonksiyondur. Tüm yerleşik hook'ları amaçlarına göre gruplanmış hâlde, her hook'un uyduğu iki kuralı ve kendi hook'unu nasıl yazacağını gör.

Bu sayfada çalıştırılabilir editörler var - düzenle, çalıştır ve sonucu anında gör.

React hook'ları, adları use ile başlayan ve bir fonksiyon bileşeninin React özelliklerini kullanmasını sağlayan fonksiyonlardır: bir değeri hatırlamak için useState, render'dan sonra kod çalıştırmak için useEffect, bir DOM düğümünü tutmak için useRef, paylaşılan veriyi okumak için useContext. Onları bileşeninin en üstünde çağırırsın, React de değerlerini render'lar arasında korur.

Burada dört hook birlikte çalışıyor. useState metni saklar, useRef düğmenin ona odaklanabilmesi için input'u gösterir, useMemo filtrelenmiş listeyi sorgu değişene kadar tutar ve useEffect sorgunun değiştiği her render'dan sonra kayıt yazar. an yaz ve Console'u izle: liste güncellendikten sonra her tuş vuruşu için bir satır.

Hook'lar neden var

React 16.8'den önce state ya da yaşam döngüsü kodu gerektiren bir bileşen bir class olmak zorundaydı. Bir özelliğin mantığı componentDidMount, componentDidUpdate ve componentWillUnmount arasında bölünürdü; onu bileşenler arasında paylaşmak ise mixin'ler (class sözdizimiyle hiç çalışmadılar), higher order component'ler ya da render props demekti ve bunların hepsi ağacını ekstra katmanlarla sarardı.

// The class way: one feature, three methods
class Clock extends React.Component {
    state = { now: new Date() };
    componentDidMount() {
        this.id = setInterval(() => this.setState({ now: new Date() }), 1000);
    }
    componentWillUnmount() {
        clearInterval(this.id);
    }
    render() {
        return <p>{this.state.now.toLocaleTimeString()}</p>;
    }
}

Hook'larla aynı özellik tek bir yerde yaşar: efekt zamanlayıcıyı başlatır, temizlemesi onu durdurur.

Saati gizle; Console timer stopped yazdırır: React, Clock ekrandan ayrıldığında temizlemeyi çalıştırdı. Yeniden göster, taze bir zamanlayıcı başlar. Class bileşenleri React 19'da hâlâ çalışır, ama yeni kod hook'ları kullanır.

Tüm yerleşik hook'lar

React 19.2 hook'larını bir bileşene ne kazandırdıklarına göre gruplar. İlk iki grubu her gün, geri kalanını ise belirli bir sorun gerektirdiğinde kullanacaksın.

HookSana ne verirSayfa
useStateRender'lardan sağ çıkan bir değer ve yeniden render eden bir setteruseState
useReducerBir reducer fonksiyonu ve dispatch edilen action'larla güncellenen stateuseReducer
useContextBir ebeveynin sağladığı bir değer, props aktarmadanuseContext
useRefRender'lardan sağ çıkan değiştirilebilir bir kutu, çoğu zaman bir DOM düğümüuseRef
useImperativeHandleBir ebeveynin ref'in aracılığıyla ne göreceğini seçerforwardRef
useEffectGenellikle boyamadan sonra çalışan kod: zamanlayıcılar, abonelikler, veri çekmeuseEffect
useLayoutEffectDOM güncellendikten sonra ama boyamadan önce çalışan koduseLayoutEffect
useInsertionEffectCSS-in-JS kütüphaneleri için layout efektlerinden önce çalışır
useEffectEventBir efektin çağırabileceği, her zaman en son props ve state'i gören bir fonksiyonuseEffect
useMemoHesaplanmış bir değeri render'lar arasında önbelleğe alıruseMemo
useCallbackBir fonksiyonu render'lar arasında önbelleğe alıruseCallback
useTransitionBir güncellemeyi acil değil olarak işaretler ve beklemedeyken sana söyleruseTransition
useDeferredValueAğır render'lar sırasında geriden gelen bir değer kopyasıuseDeferredValue
useIdSunucuda ve istemcide eşleşen benzersiz bir iduseId
useSyncExternalStoreReact dışında yaşayan bir store'a abone oluruseSyncExternalStore
useDebugValueReact DevTools'ta özel bir hook için bir etiket
useBir promise'i ya da bir context'i okur ve bir koşulun içinde durabiliruse
useActionStateBir form action'ının güncellediği, bekleme bayrağı olan stateuseActionState
useOptimisticSunucu yanıt vermeden önce beklenen sonucu gösteriruseOptimistic
useFormStatusEbeveyn formun bekleme durumu (react-dom'dan)

use, useActionState, useOptimistic ve useFormStatus React 19 ile geldi, useEffectEvent ise 19.2'de kararlı hâle geldi. Listedeki diğer tüm hook'lar React 18'de de çalışır.

State render eder, ref'ler etmez

Her hook bir render tetiklemez. useState ve useReducer tetikler: değerlerini değiştir, React bileşeni yeniden çizer. useRef sana current alanını özgürce değiştirebileceğin bir nesne verir ve React bu yüzden asla yeniden render etmez. Bu da onu bir zamanlayıcı id'si, önceki bir değer ya da ekranın göstermediği bir sayı için doğru yer yapar.

useReducer sepeti, useState notu tutar; ikisi de değiştiklerinde bir render'a yol açar ve efekt her render için bir satır yazar. Efekt ayrıca commits.current'ı değiştirir, ama bu değişiklik asla kendi başına bir render'a yol açmaz, bu yüzden kayıt döngüye girmez. Sayı bileşen gövdesinde değil bir efektte güncellenir, çünkü gövde render sırasında hiçbir şeyi değiştirmemelidir.

Hook kuralları

Her hook iki kurala uyar:

  1. Hook'ları bileşeninin en üst düzeyinde çağır; asla bir koşul, bir döngü ya da iç içe bir fonksiyon içinde değil.
  2. Hook'ları yalnızca fonksiyon bileşenlerinden ya da kendi özel hook'larından çağır.

React hook'ları adlarıyla tanımaz. Onları çağırdığın sırayla tanır ve bu sıranın her render'da aynı olmasını bekler. Bir if içindeki hook ondan sonraki her hook'u kaydırırdı. Hook kuralları sayfası neyin bozulduğunu ve nasıl düzeltileceğini gösteriyor. use tek istisnadır: bir koşulun içinde çağrılabilir.

İlk özel hook'un

İki bileşenin aynı state'li mantığa ihtiyacı olduğunda onu adı use ile başlayan bir fonksiyona taşı. Bu fonksiyon diğer her hook'u çağırabilir. Onu çağıran her bileşen kendi state'ini alır.

İki sayaç da aynı hook'u çalıştırır, ama birine tıklamak diğerine dokunmaz: özel bir hook state'i değil mantığı paylaşır. useCounter'a bir decrement fonksiyonu ve onu çağıran bir düğme ekle; iki sayaç da onu aynı anda alır. Daha fazla kalıp (useToggle, useDebounce, useLocalStorage) özel hook'lar sayfasında.

Hangi hook'a başvurmalı

  • Bir değer değiştiğinde ekranın da değişmesi gerekiyor: useState, ya da birçok olay aynı state'i güncelliyorsa useReducer.
  • React dışındaki bir şeyle (bir zamanlayıcı, bir abonelik, bir istek) konuşman gerekiyor: useEffect.
  • Bir DOM düğümüne ya da ekranın göstermediği bir değere ihtiyacın var: useRef.
  • Ağacın derinlerindeki birçok bileşenin aynı değere ihtiyacı var: useContext.
  • Bir render, tek bir hesaplama yüzünden ya da memoize edilmiş bir çocuk yeniden render olduğu için yavaş: useMemo ve useCallback. React Compiler bu memoization'ı senin için ekleyebilir, ama onu elle yazmak hâlâ çalışır ve hâlâ yaygındır.
  • Arkasındaki güncelleme ağır olduğu için yazmak takılıyor: useTransition ya da useDeferredValue.

Sıkça Sorulan Sorular

React'te hook'lar nedir?

Hook'lar, adları use ile başlayan ve bir fonksiyon bileşeninin React özelliklerini kullanmasını sağlayan fonksiyonlardır: state için useState, yan etkiler için useEffect, context için useContext, render'lardan render'a yol açmadan sağ çıkan değerler için useRef ve daha fazlası.

Hook'lar React'e neden eklendi?

Hook'lardan önce (React 16.8) state ve yaşam döngüsü metotları yalnızca class bileşenlerinde vardı ve state'li mantığı paylaşmak mixin'ler, higher order component'ler ya da render props gerektiriyordu. Hook'lar bu mantığı herhangi bir fonksiyon bileşeninden çağırabileceğin ve özel hook'lar olarak paylaşabileceğin düz fonksiyonlara koyar.

React'te kaç tane hook var?

React 19.2, react paketinde yaklaşık yirmi yerleşik hook ile, artı react-dom içinde useFormStatus ile gelir. Çoğu uygulama günlük olarak bir avuç hook kullanır: useState, useEffect, useRef, useContext, useMemo ve useCallback.

Hook'ları class bileşenlerinde kullanabilir miyim?

Hayır. Hook'lar yalnızca fonksiyon bileşenlerinin ve diğer hook'ların içinde çalışır. Yine de bir class bileşenini fonksiyon bileşenlerinin yanında render edebilirsin ve bir class, hook kullanan bir fonksiyon bileşenini render edebilir.

Özel hook (custom hook) nedir?

Adı use ile başlayan ve başka hook'ları çağıran kendi fonksiyonundur. Birkaç bileşenin aynı state'li mantığı yeniden kullanmasını sağlar; onu çağıran her bileşen yine de kendi ayrı state'ini alır.

Coddy programlama dilleri çizimi

Coddy ile kodlamayı öğren

BAŞLA