Mehmet

WFN Üye
Konular
1,851
Mesajlar
1,852
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 7 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi
Props, bir bileşene dışarıdan gönderilen ve bileşenin kendisi tarafından değiştirilmemesi gereken verilerdir. State ise bileşenin kendi içinde tuttuğu, kullanıcı etkileşimi veya başka bir olay sonucunda güncelleyebildiği veridir. Ayırıcı ölçüt yalnız değerin değişmesi değildir: props da sonraki render’da değişebilir. Değerin sahibi olan bileşen ve güncellemeyi kimin yönettiği önemlidir.

Props nasıl çalışır?​


Props, üst bileşenden alt bileşene doğru tek yönlü veri akışının parçasıdır. Alt bileşen props değerini okuyabilir, fakat doğrudan üzerine yazmamalıdır. Yeni bir değer gerektiğinde alt bileşen genellikle üst bileşene bir callback bildirir; değişikliği üst bileşen yapar ve yeni props gönderir.

Kod:
function UserCard({ name, role }) {
  return (
    <section>
      <strong>{name}</strong>
      <span>{role}</span>
    </section>
  );
}

function App() {
  return <UserCard name="Ayşe" role="Editör" />;
}

Bu örnekte name ve role UserCard bileşeninin kendi verisi değildir. App tarafından gönderilir. Props nesnesini veya içindeki nesneleri yerinde değiştirmeyin. Destructure edilmiş name parametresine yeniden atamak ise yalnız o yerel bağlamı değiştirir; ebeveynin verisini veya kalıcı React state’ini güncellemez. Yeni değer gerekiyorsa sahibi olan üst bileşene callback ile bildirin.

State nasıl çalışır?​


State, bileşenin değişebilen yerel hafızasıdır. React'te state'i güncellemek için setter fonksiyonu kullanılmalıdır. Setter çağrıldığında React bileşeni yeniden çalıştırarak yeni state değerine göre arayüzü günceller.

Kod:
import { useState } from "react";

function Counter({ title }) {
  const [count, setCount] = useState(0);

  return (
    <section>
      <h2>{title}</h2>
      <p>Değer: {count}</p>
      <button type="button" onClick={() => setCount(value => value + 1)}>
        Artır
      </button>
    </section>
  );
}

Bu bileşende title props'tur; dışarıdan gelir ve Counter tarafından değiştirilmez. count state'tir; butona basıldığında setCount ile değiştirilir. Başarılı sonuç, ekrandaki değerin her tıklamada bir artmasıdır. Değer değişmiyorsa setter yerine doğrudan değişkenin güncellenip güncellenmediğini ve bileşenin gerçekten tarayıcıya render edilip edilmediğini kontrol edin. State'i doğrudan değiştirmek React'in değişikliği güvenilir biçimde algılamamasına yol açabilir.

Props ve state'i hangi durumda kullanmalı?​


Aynı bileşende ikisi birlikte bulunabilir. Karar verirken verinin sahibi olan bileşeni ve değişikliği kimin yapacağını belirleyin:

ÖzellikPropsState
KaynakÜst bileşen veya dış veriBileşenin kendi iç durumu
DeğiştirmeAlt bileşen doğrudan değiştirmezSetter ile güncellenir
AmaçBileşeni yapılandırmak ve veri geçirmekEtkileşim ve geçici durumu saklamak
ÖrnekBaşlık, kullanıcı adı, temaAçık/kapalı, sayaç, form alanı

Birden fazla kardeş bileşen aynı veriyi kullanacaksa state'i ortak üst bileşene taşımak genellikle daha doğru olur. Üst bileşen state'i yönetir, kardeşlere props olarak gönderir. Böylece iki ayrı bileşende aynı verinin birbirinden kopuk kopyalarını tutma riski azalır.

Örnek parçalar JSX kurulmuş bir projede bileşen tanımlarıdır; Counter’ı örneğin Counter title="Deneme" props’uyla uygulama ağacına ekleyin. State’in korunması bileşenin ağaçtaki kimliğine bağlıdır; tür veya key değişip yeniden oluşturulursa başlangıç state’i tekrar kurulur.

Uygulamada izlenecek karar adımları​


  1. Değerin bileşene dışarıdan mı geldiğini sorun. Dışarıdan geliyorsa props olarak tasarlayın.
  2. Değer kullanıcı etkileşimiyle veya bileşenin çalışması sırasında değişecekse state kullanın.
  3. Birden fazla bileşen değeri okuyacaksa state'i bu bileşenlerin ortak üst seviyesine taşıyın.
  4. Alt bileşenin değişiklik isteğini callback prop ile üst bileşene bildirin; props'u doğrudan değiştirmeyin.
  5. State'i mevcut props'tan kopyalamadan önce bunun gerçekten gerekli olup olmadığını değerlendirin. Kopya değerler zamanla birbirinden farklılaşabilir.

En sık yapılan hata, her veriyi state yapmaktır. Sabit bir başlık, hesaplanabilen bir toplam veya props'tan doğrudan türetilebilen bir değer için ayrıca state tutmak gereksiz senkronizasyon sorunları doğurabilir. Ters hata da state gerektiren bir değeri normal değişkene koymaktır; normal değişken değişse bile React'in yeniden render edilmesi garanti edilmez.

Kaynaklar​



Sık sorulan sorular​


Props değişebilir mi?​


Üst bileşen yeni bir değer gönderdiğinde alt bileşen yeni props alabilir. Değişen şey alt bileşenin props'u doğrudan değiştirmesi değil, üst bileşenin yeni render sonucunda farklı değer göndermesidir.

State neden üst bileşene taşınır?​


Aynı veriye ihtiyaç duyan kardeş bileşenlerin tek bir güncel kaynağı paylaşması için state ortak üst bileşene taşınır. Alt bileşenler bu veriyi props olarak alır.

Props'tan state oluşturmak ne zaman anlamlıdır?​


Dışarıdan gelen başlangıç değerinin bileşen içinde bağımsız olarak düzenlenmesi gerekiyorsa anlamlı olabilir. Ancak sonradan gelen props değişikliklerinin de state'e yansıtılması gerekiyorsa bu ilişki açıkça tasarlanmalı; aksi halde iki farklı veri kaynağı oluşur.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic