React, kullanıcı arayüzlerini bileşenlerden kurmaya yarayan bir JavaScript kütüphanesidir. Ekranın mevcut veriye göre nasıl görünmesi gerektiğini tarif edersin; veri değiştiğinde React sayfayı buna uyacak şekilde günceller. React, React JS ve ReactJS aynı şeydir: Facebook'ta (bugünkü adıyla Meta) geliştirilmiş açık kaynaklı bir kütüphane.
İki düğmeye de tıkla. Her Counter kendi sayısını tutar, çünkü her biri kendi state'i olan ayrı bir bileşen kopyasıdır. Üçüncü bir satır ekle, <Counter label="Plums" />, ve yeni, bağımsız bir sayaç belirir.
Bu kısa örnek, React'in üzerine kurulduğu üç fikri zaten gösteriyor: bileşenler (Counter ve App arayüz döndüren fonksiyonlardır), JSX (return içindeki HTML benzeri sözdizimi) ve state (count, değiştiğinde React'in bileşeni yeniden çizmesini sağlayan bir değer).
React'in çözdüğü sorun
Bir kullanıcı arayüzü, bir verinin resmidir. Veri değişince resim de değişmek zorundadır ve ekranda o veriye bağlı her parça onunla birlikte değişmelidir. Kütüphane olmadan bu kodu elle yazarsın: her öğeyi bulur, sonra metnini, sınıfını ya da görünürlüğünü kendin ayarlarsın. Her yeni özellik, güncellemeyi unutmaman gereken bir yer daha ekler.
React bunu tersine çevirir. Belirli bir state için ekranın nasıl olması gerektiğini söyleyen tek bir fonksiyon yazarsın, React de sayfanın hangi parçalarının değişmesi gerektiğini kendisi bulur. Buna bildirimsel (declarative) arayüz denir; her DOM değişikliğini adım adım listeleyen buyurgan (imperative) kodun karşıtıdır. İşte iki stil, tek bir örnekte yan yana:
ByHand, paragrafını düz DOM koduna bırakır (efekt bu kodu ancak React paragrafı oluşturduktan sonra bir kez çalıştırır). Sayıyı bir değişkende tutar, her öğeyi querySelector ile bulur ve metnini elle ayarlar. Declarative ise sadece "sayıyı göster ve çift olup olmadığını göster" der. handleClick içinde .parity'yi ayarlayan satırı sil ve birkaç kez tıkla: ilk satır artık 3'ün çift olduğunu iddia eder, ikinci satır ise senkronu kaybedemez, çünkü metin her render'da count'tan hesaplanır.
React sayfayı nasıl günceller
State değiştiğinde React bileşen fonksiyonunu yeniden çağırır. Bu çağrıya render denir. Fonksiyon arayüzün yeni bir tarifini döndürür, React bunu öncekiyle karşılaştırır ve gerçek sayfada yalnızca farklı olan kısımları değiştirir. Bellekteki bu tarife çoğu zaman sanal DOM (virtual DOM) denir.
Önizlemenin altındaki konsolu aç ve birkaç harf yaz. Her tuş vuruşu yeni değerle bir render kaydeder. Input odağını ve imleç konumunu korur, çünkü React tüm sayfaya değil, yalnızca paragrafın metnine ve input'un değerine dokundu. Render sayfası bir bileşenin tam olarak ne zaman yeniden render edildiğini anlatır.
Bir bakışta bileşenler, JSX ve state
Bileşenler, adı büyük harfle başlayan JavaScript fonksiyonlarıdır. Ekranda ne görünmesi gerektiğini döndürürler ve onları HTML etiketleri gibi kullanırsın: <Counter />. Bir sayfa, düğme gibi küçüklerden bütün bir ayarlar ekranı gibi büyüklere kadar bileşenlerden oluşan bir ağaçtır. Bkz. bileşenler.
JSX, JavaScript içinde işaretleme yazmanı sağlayan sözdizimidir. Süslü parantezler seni JavaScript'e geri götürür; böylece {count} bir değer gösterir, {items.map(...)} ise bir diziyi listeye çevirir. Bir derleme aracı, tarayıcı çalıştırmadan önce JSX'i düz fonksiyon çağrılarına derler.
State, bir bileşenin render'lar arasında hatırladığı veridir. Onu useState hook'u ile oluşturursun; setter'ını çağırmak da React'e bir şeyin değiştiğini söylemenin yoludur. Veri, bir bileşenin argümanları olan props aracılığıyla ebeveynlerden çocuklara doğru akar.
Bu örnek hepsini kullanıyor: state'teki bir diziden render edilen bir liste ve ona ekleme yapan bir form.
Bir görev ekle ve iki şey aynı anda değişir: liste ve altındaki sayı. Sayıya güncellenmesini hiç söylemedin. İkisi de tasks'tan okur, bu yüzden ikisi de onu takip eder. Başlangıç dizisini [] yap; liste bunun yerine "Nothing to do." gösterir.
React ne değildir
React tam bir framework değil, bir kütüphanedir. Bileşenleri, state'i ve bunları arayüze dönüştürmeyi kapsar; eksiksiz bir uygulamanın ihtiyaç duyduğu birkaç şeyi bilerek dışarıda bırakır:
- Yönlendirme (routing). URL'leri sayfalara eşlemenin yerleşik bir yolu yoktur. Bu boşluğu React Router ve framework yönlendiricileri doldurur.
- Veri çekme ve sunucu tarafı render. React sana efektler ve Suspense gibi araçlar verir, ama verinin nereden geldiği ya da sayfaların sunucuda nasıl render edileceği konusunda bir görüş dayatmaz.
- Bir derleme kurulumu. Tarayıcılar JSX'i anlamaz, bu yüzden onu derlemek için Vite gibi bir araca ihtiyacın var.
Framework'ler bu parçaları sağlamak için React'in üstüne kurulur. Next.js ve React Router'ın framework modu yönlendirme, sunucu tarafı render ve veri yükleme ekler; React ekibi de tam bir uygulamaya bunlardan biriyle başlamayı önerir. İstemci tarafı bir uygulama ya da öğrenmek için Vite ile düz React küçük ve hızlı bir başlangıçtır; bkz. React nasıl kurulur.
React ve React Native
React'in kendisi yalnızca bileşenleri ve nasıl değiştiklerini tarif eder. Ayrı bir renderer onları görebileceğin bir şeye dönüştürür. React DOM web sayfalarına render eder; bu sitedeki her örnek bunu kullanır. React Native aynı türden bileşenleri yerel iOS ve Android görünümlerine render eder; bu yüzden <div> ve <p> yerine <View> ve <Text> yazarsın ve ortada HTML ya da CSS dosyası yoktur. Bileşenler, props, state ve hook'lar ikisinde de aynı çalışır, yani burada öğrendiklerin doğrudan oraya taşınır.
React ne zaman öğrenilmeli
React'i JavaScript temellerinden sonra öğren, çünkü React'teki her şey JavaScript'tir. Başlamadan önce şunlarla rahat olmalısın:
- değişkenler, fonksiyonlar ve ok fonksiyonları
- diziler ve onların
mapvefiltermetotları - nesneler, destructuring ve spread sözdizimi (
...) importveexport- veri yüklemek için promise'ler ve
async/await
Bunlar tanıdık geliyorsa JSX ve bileşenlerle, sonra props ve state ile başla. Efektler, ref'ler, context ve performans araçları, küçük etkileşimli bileşenler kurmak doğal gelmeye başladığında sırası gelir.
Sıkça Sorulan Sorular
React ne için kullanılır?
React etkileşimli kullanıcı arayüzleri kurmak için kullanılır: web uygulamaları, paneller, formlar, tek sayfalık uygulamalar ve sıradan web sitelerinin bazı bölümleri. React Native ile aynı bileşen modeli iOS ve Android uygulamaları da kurar.
React bir framework mü, yoksa kütüphane mi?
React bir kütüphanedir. Bileşenleri, state'i ve render'ı yönetir ama yerleşik bir yönlendiricisi, veri çekme katmanı ya da derleme kurulumu yoktur. Next.js ve React Router'ın framework modu gibi framework'ler bunları React'in üstüne ekler.
React JS ile React aynı şey mi?
Evet. React, React JS ve ReactJS aynı kütüphanenin üç adıdır. "JS" eki, React'in JavaScript ile ve JavaScript için yazılmış olmasından gelir.
React öğrenmeden önce JavaScript bilmem gerekir mi?
Evet. React bileşenleri JavaScript fonksiyonlarıdır, bu yüzden önce fonksiyonlar, diziler (map, filter), nesneler, destructuring, ok fonksiyonları, modüller ve promise'lerle rahat olmalısın.
React ile React Native arasındaki fark nedir?
React arayüzleri bileşenler olarak tarif eder. React DOM bu bileşenleri bir web sayfasına render eder, React Native ise yerel mobil görünümler olarak render eder. Bileşenler, props, state ve hook'lar ikisinde de aynı şekilde çalışır.