React useState'siz useEffect kullanmak

CrevZZ

Hectopat
Katılım
9 Temmuz 2020
Mesajlar
142
React'ta useEffect'i useState ile tanımlanmamış, normal var/let ile tanımlanmış değişkenlerle kullanmak mümkün mü? Denedim fakat değişkenin değeri değiştiğinde useEffect tepki vermedi. Veya aynı bu şekilde tanımlanmış bir değişken için useEffect dışında aynı işlevi sağlayacak başka bir yapı var mı? Yani var/let ile tanımlanmış bir değişken için, değeri her değiştiğinde çalışması gereken kodları yazabileceğim bir yapı gerekiyor.
 
JavaScript:
 let count = 0;

  useEffect(() => {
    count += 1;
    console.log(count);
  }, []);

  return (
    <>
      <p>{count}</p>
    </>
  );

Count değeri artacaktır ve console.log 1 çıktısını verecektir. Ancak let ve var ile tanımlanmış değişkenler React tarafından yönetilmediği için, nesne yeniden render edilmeyecek ve ekranda 0 gözükmeye devam edecektir.

Neden useState yerine var/let kullanmak istiyorsunuz?
 
JavaScript:
 let count = 0;

  useEffect(() => {
    count += 1;
    console.log(count);
  }, []);

  return (
    <>
      <p>{count}</p>
    </>
  );

Count değeri artacaktır ve console.log 1 çıktısını verecektir. Ancak let ve var ile tanımlanmış değişkenler React tarafından yönetilmediği için, nesne yeniden render edilmeyecek ve ekranda 0 gözükmeye devam edecektir.

Neden useState yerine var/let kullanmak istiyorsunuz?

Diyagram kurmak için bir kütüphane ekledim Init fonksiyonu içerisinde diyagramı kurma işlemlerini gerçekleştiriyor. Fakat useState'in set fonksiyonu çalıştığı zaman init fonksiyonu içinde yapılan değişikler anlamadığım bir şekilde geçersiz kalıyor.

Örnek vereyim global bir "a" değişkeni tanımlayıp değerini 1 yaptık. Init fonksiyonunun içine de "a=2" yazdık. Init fonksiyonu diyagram oluşturulmak için sayfa render edildiğinde direk çağırılıyor ve "a" değerini 2 yapıyor. Sıkıntı şurada ki useState ile tanımladığımız başka bir değişken için set fonksiyonunu kullandığımızda "a" değeri 1 oluyor yani eski haline dönüyor.

Aslında yapmak istediğim şunun gibi bir şey, fakat işe yaramıyor.

JavaScript:
let count = 0;

  useEffect(() => {
    console.log(count);
  }, [count]);

"count" değeri kodun başka kısımlarında değiştiği zaman çalışsın istiyorum. Fakat useState kullanmadan bu olmuyor sanırım.
 
İsterseniz kafanızdaki yapıyı veya sorunu ChatGPT'ye anlatın. Çözüm çıkabilir.

Teşekkür ederim. ChatGPT'den bir örnek yapmasını istedim yukarıda eklediğim kod gibi bir şey yazdı. Herhalde çalışması lazım diye biraz bakındım. Değişkeni import'ların altında class'ın üstünde tanımlayınca çalıştı.
 

Yeni konular

Geri
Yukarı