React'te Key Kullanımı
React'te listeler oluştururken, her öğeye benzersiz bir key vermemiz gerekir. Eğer key eklemezsek, şu gibi bir uyarı alabiliriz:
Warning: Each child in a list should have a unique "key" prop.
Peki, bu uyarının nedeni nedir? React neden her öğeye özel bir kimlik vermemizi istiyor? Hadi birlikte inceleyelim.
Neden key kullanmalıyız?
React'in liste öğelerini takip edebilmesi için her öğeyi benzersiz bir şekilde tanımlaması gerekir. Çünkü React, değişiklikleri doğrudan izlemez, sadece önceki ve sonraki durumu karşılaştırarak aradaki farkı hesaplar.
Eğer her öğeye benzersiz bir key eklersek:
- React hangi öğelerin değiştiğini, eklendiğini veya kaldırıldığını kolayca belirleyebilir.
- Performans optimizasyonu sağlanır.
- Beklenmedik hata ve edge-case (özel durum) hatalarının önüne geçilir.
Key Kullanım Örnekleri
❌ Yanlış Kullanım
function NavigationLinks({ links }) {
  return (
    <ul>
      {links.map((item) => (
        <li>
          <a key={item.id} href={item.href}>
            {item.text}
          </a>
        </li>
      ))}
    </ul>
  );
}
Bu kodun hatası şudur: key değeri <a> etiketine verilmiş, ancak React'in takip ettiği öğeler <li> etiketleridir. React, <li> öğelerinin benzersiz olup olmadığını kontrol eder. Bunu düzeltmek için key değerini <li> öğesine eklemeliyiz:
✅ Doğru Kullanım
function NavigationLinks({ links }) {
  return (
    <ul>
      {links.map((item) => (
        <li key={item.id}>
          <a href={item.href}>{item.text}</a>
        </li>
      ))}
    </ul>
  );
}
Fragment Kullanırken Key Kullanımı
Bazı durumlarda React.Fragment kullanarak birden fazla öğeyi tek bir kapsayıcıda gruplarız. Ancak, bu durumda bile key eklememiz gerekebilir.
❌ Yanlış Kullanım
function Thing({ data }) {
  return data.map((item) => (
    <>
      <p>{item.content}</p>
      <button>Cancel</button>
    </>
  ));
}
Bu kodda key kullanılmadığı için React uyarı verecektir. Bunu düzeltmek için React.Fragment kullanarak key eklemeliyiz:
✅ Doğru Kullanım
function Thing({ data }) {
  return data.map((item) => (
    <React.Fragment key={item.id}>
      <p>{item.content}</p>
      <button>Cancel</button>
    </React.Fragment>
  ));
}
Key Değerleri Küresel Olarak Benzersiz Olmak Zorunda mı?
Hayır! Birçok geliştirici, key değerlerinin tüm uygulama genelinde benzersiz olması gerektiğini düşünür, ancak bu doğru değildir. key yalnızca ilgili map fonksiyonunun içinde benzersiz olmalıdır.
Örneğin, aşağıdaki kod tamamen geçerlidir:
function App() {
  return (
    <ul>
      {data.map((contact) => (
        <ContactCard
          key={contact.id}
          name={contact.name}
          job={contact.job}
          email={contact.email}
        />
      ))}
      {data.map((contact) => (
        <ContactCard
          key={contact.id}
          name={contact.name}
          job={contact.job}
          email={contact.email}
        />
      ))}
    </ul>
  );
}
Her map() çağrısı ayrı bir dizi oluşturduğu için, key değerleri yalnızca o dizi içinde benzersiz olmalıdır.
Sonuç
- key, React'in DOM güncellemelerini daha verimli yapmasını sağlar.
- keydeğerleri,- mapiçinde oluşturulan öğelerde benzersiz olmalıdır.
- key, doğrudan ilgili öğeye eklenmelidir (- li,- React.Fragment, vs.).
- key, yalnızca içinde bulunduğu liste için benzersiz olmalıdır, uygulama genelinde değil.
Bunları uygulayarak React projelerinizde daha temiz ve hatasız bir yapı oluşturabilirsiniz! 🚀