React'te Fonksiyonlara Argüman Geçmek

React'te bir butona tıkladığımızda belirli bir fonksiyonu çalıştırmak isteyebiliriz. Ancak, eğer bu fonksiyonun belirli bir argüman almasını istiyorsak, nasıl yapmalıyız?

Bunu anlamak için bir tema değiştirme fonksiyonu yazalım:

// Tema değiştirme fonksiyonu
function setTheme(theme) {
  console.log(`Tema değiştirildi: ${theme}`);
}

// Açık moda geçiş:
setTheme('light');

// Karanlık moda geçiş:
setTheme('dark');

Bu fonksiyon, verilen tema adına göre uygun işlemi yapacak şekilde tasarlanmıştır. Şimdi bu fonksiyonu bir butona bağlayalım:

<button onClick={setTheme}>Tema Değiştir</button>

Sorun: Argüman Geçiremiyoruz

Yukarıdaki kullanımda setTheme fonksiyonunu doğrudan onClick olayına verdik. Ancak bu şekilde, butona tıklandığında React fonksiyonu çağırıyor fakat herhangi bir argüman iletmiyor. Bizim setTheme('dark') gibi bir çağrı yapmamız gerekiyor.

Yanlış bir çözüm şu olabilir:

<button onClick={setTheme('dark')}>Tema Değiştir</button>

Ancak bu hatalıdır, çünkü setTheme('dark') ifadesi, bileşen her render edildiğinde hemen çalışır. Bizim amacımız, butona tıklandığında çalışmasını sağlamaktır.

Çözüm: Wrapper Fonksiyon Kullanmak

Bu sorunu çözmek için bir anonim fonksiyon (wrapper function) kullanabiliriz:

<button onClick={() => setTheme('dark')}>Tema Değiştir</button>

Burada ne yaptık?

Bu yöntem, React projelerinde en yaygın ve önerilen yaklaşımdır.

Performans Konusu

Bazı kaynaklar, bu şekilde anonim fonksiyon kullanmanın performans açısından kötü olduğunu iddia eder. Ancak bu doğru değildir:

Alternatif Yöntem: .bind() Kullanımı

Başka bir yöntem olarak, .bind() kullanabiliriz:

<button onClick={setTheme.bind(null, 'dark')}>Tema Değiştir</button>

Bu yöntem de çalışır, ancak React topluluğunda yaygın değildir ve ekstra bir karmaşıklık ekler. Bu yüzden genellikle önerilmez.

Sonuç

Eğer bir fonksiyona argüman geçirmek istiyorsanız: ✅ Anonim fonksiyon (wrapper function) kullanın:

<button onClick={() => setTheme('dark')}>Tema Değiştir</button>

Bu yöntem temiz, anlaşılır ve en yaygın kullanılan yaklaşımdır. 🎯