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:


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ç

Bunları uygulayarak React projelerinizde daha temiz ve hatasız bir yapı oluşturabilirsiniz! 🚀