Uygulamanız büyüdükçe, state’inizin nasıl düzenlendiği ve bileşenleriniz arasında veri akışının nasıl olduğu konusunda daha bilinçli olmanız size yardımcı olur. Gereksiz ve yenilenen state, yaygın bir hata kaynağıdır. Bu bölümde, state’inizi nasıl iyi yapılandıracağınızı, state güncelleme mantığınızı nasıl sürdürülebilir tutacağınızı ve uzak bileşenler arasında state’i nasıl paylaşacığınızı öğreneceksiniz.
Bu bölümde
- UI değişiklikleri nasıl state değişikliği olarak düşünülür
- State nasıl iyi yapılandırılabilir
- Bileşenler arasında paylaşmak için state nasıl “yukarı kaldırılır”
- State’in korunup korunmayacağı ya da sıfırlanıp sıfırlanmayacağı nasıl kontrol edilir
- Karmaşık state mantığı bir fonksiyonda nasıl birleştirilir
- ”Prop drilling” yapmadan bilgi nasıl iletilir
- Uygulamanız büyüdükçe state yönetimi nasıl ölçeklenidirilir
State ile girdiye reaksiyon verme
React ile kullanıcı arayüzünü direkt olarak koddan modifiye etmeyeceksiniz. Örneğin, “butonu devre dışı bırak”, “butonu etkinleştir”, “başarılı mesajını göster” gibi komutlar yazmayacaksınız. Onun yerine, bileşeninizin farklı görsel state’leri (“başlangıç state’i”, “yazma state’i”, “başarı state’i”) için görmek istediğiniz kullanıcı arayüzünü tanımlayacak ve ardından kullanıcı girdisine yanıt olarak state değişikliklerini tetikleyeceksiniz. Bu, tasarımcıları kullanıcı arayüzünü nasıl düşündüğüyle benzerdir.
Aşağıda React ile yapılmış bir kısa sınav formu vardır. Gönder butonunun etkinleştirilip etkinleştirilmeyeceğini ve bunun yerine başarı mesajının gösterilip gösterilmeyeceğini belirlemek için status
durum değişkeninin nasıl kullanıldağına dikkat edin.
Bu konuyu öğrenmeye hazır mısınız?
Girdiye State ile Reaksiyon Verme sayfasını okuyarak etkileşimlere state odaklı zihniyetle nasıl yaklaşılacağını öğrenebilirsiniz.
Devamını OkuState yapısını seçme
State’i iyi yapılandırmak, değiştirmesi ve hata ayıklaması keyfli bir bileşen ile sürekli hata kaynağı olan bir bileşen arasında fark yaratabilir. En önemli ilke, state’in gereksiz veya yinelenen bilgiler içermemesidir. Gereksiz state varsa, güncellemeyi unutmak ve hatalara neden olmak kolaydır!
Örneğin, bu form gereksiz bir fullName
state değişkenine sahip:
Bileşen render edilirken fullName
’i hesaplayarak state’i kaldırabilir ve kodu basitleştirebilirsiniz:
Bu küçük bir değişiklik gibi görünebilir ama React uygulamalarındaki bir çok hata bu şekilde düzeltilir.
Bu konuyu öğrenmeye hazır mısınız?
State Yapısını Seçme sayfasını okuyarak hatalardan kaçınmak için state’i nasıl yapılandıracağınızı öğrenebilirsiniz.
Devamını OkuBileşenler arasında state’i paylaşma
Bazen, iki bileşenin state’inin birlikte değişmesini istersiniz. Bunu yapmak için, her ikisinin de state’ini kaldırın, state’i en yakın ortak üst bileşene taşıyın ve sonra iki bileşene prop’lar ile iletin. Bu “state’i yukarı kaldırmak” olarak bilinir ve React kodu yazarken en çok yapacağınız şeylerden biridir.
Bu örnekte, aynı anda sadece bir panel aktif olmalıdır. Bunu başarmak için, aktif state’i her bir panelin içinde tutmak yerine, üst bileşen state’i tutar ve alt bileşenler için prop’ları belirler.
Bu konuyu öğrenmeye hazır mısınız?
Bileşenler Arasında State Paylaşımı sayfasını okuyarak state’i nasıl yukarı kaldıracağınızı ve bileşenleri senkronize tutacağınızı öğrenebilirsiniz.
Devamını OkuState’i korumak ve resetlemek
Bir bileşeni yeniden render ettiğinizde, React, ağacın hangi kısımlarını tutacağın (ve güncelleyeciğine) ve hangi kısımları atacağına ya da sıfırdan yeniden oluşturacağına karar vermelidir. Pek çok durumda, React’in otomatik davranışı yeterince iyi çalışmaktadır. Varsayılan olarak React, ağacın daha önce render edilmiş bileşen ağacıyla “eşleşen” kısımlarını korur.
Ancak, bazen bunu istemezsiniz. Bu sohbet uygulamasında, bir mesaj yazmak ve ardından alıcıyı değiştirmek girdiyi sıfırlamamaktadır. Bu kullanıcının kazara yanlış kişiye mesaj göndermesine neden olabilir:
React, varsayılan davranışı geçersiz kılmanıza ve bir bileşene <Chat key={email} />
gibi farklı bir key
ileterek state’i sıfırlamaya zorlamanıza izin verir. Bu React’e, eğer alıcı farklı ise, yeni verilerle (ve girdiler gibi kullanıcı arayüzüyle) sıfırdan yeniden render edilmesi gereken farklı bir Chat
bileşeni olarak kabul edilmesi gerektiğini söyler. Şimdi alıcılar arasında geçiş yapmak, aynı bileşeni render etseniz bile girdi alanını sıfırlar.
Bu konuyu öğrenmeye hazır mısınız?
State’i Korumak ve Sıfırlamak sayfasını okuyarak state’in ömrünü ve onu nasıl kontrol edebileceğinizi öğrenebilirsiniz.
Devamını OkuState mantığını bir reducer’a aktarma
Birçok olay yöneticisine yayılmış çok fazla sayıda state güncellemesine sahip bileşenler can sıkıcı olabilir. Bu gibi durumlarda tüm state güncelleme mantıklarını “reducer (redüktör)” adı verilen tek bir fonksiyonda birleştirebilirsiniz. Olay yönetecileriniz, yalnızca kullanıcı “eylemlerini” belirttikleri için kısa ve öz hale gelir. Dosyanın en altında, reducer fonksiyonu her bir eyleme yanıt olarak state’in nasıl güncellenmesi gerektiğini belirtir!
Bu konuyu öğrenmeye hazır mısınız?
State Mantığını Bir Reducer’a Aktarma sayfasını okuyarak reducer fonksiyonunda mantığın nasıl birleştirileceğini öğrenebilirsiniz.
Devamını OkuContext ile veriyi derinlemesine aktarma
Bilgiyi genelde prop’lar vasıtasıyla üst elemandan alt elemana doğru aktarırsınız. Ancak, aktarmanız gereken bileşen ulaşana kadar birçok ara bileşene iletmeniz veya birden çok bileşene aktarmanız gerekiyorsa prop kullanmak zahmetli ve karmaşık hale gelir. Context, bilgiyi üst bileşenden ihtiyaç duyan alt bileşenlere (derinliğine bakılmaksızın) prop olarak açıkça belirtmeden iletmenizi sağlar.
Burada, Heading
bileşeni başlık seviyesini en yakın Section
’a seviyesini “sorarak” belirler. Her Section
, üst Section
’a sorarak ve ona bir tane ekleyerek kendi seviyesini takip eder. Her Section
, tüm alt bileşenlerine prop aktarmadan bilgi sağlar ve bunu context aracılığıyla yapar.
Bu konuyu öğrenmeye hazır mısınız?
Context ile Veriyi Derinlemesine Aktarma sayfasını okuyarak prop iletmesine alternatif olarak context’i nasıl kullanacağınızı öğrenebilirsiniz.
Devamını OkuReducer ve context ile ölçeklendirme
Reducer’lar bir bileşenin state güncelleme mantığını bir araya getirmenizi sağlar. Context, bilgileri diğer bileşenlere derinlemesine iletmeye olanak tanır. Reducer’ları ve context’i bir araya getirerek karmaşık bir ekranın state’ini yönetebilirsiniz.
Bu yaklaşımla birlikte, karmaşık state’e sahip bir üst bileşen bunu bir reducer ile yönetir. Ağacın herhangi bir yerindeki diğer bileşenler context aracılığıyla state’i okuyabilir. Ayrıca bu state’i güncellemek için eylemler de dispatch edebilirler.
Bu konuyu öğrenmeye hazır mısınız?
Reducer ve Context ile Ölçeklendirme sayfasını okuyarak büyüyen bir uygulamada state yönetiminin nasıl ölçeklendirildiğini öğrenin.
Devamını OkuSırada ne var?
Girdiye State ile Reaksiyon Verme sayfasına giderek okumaya başlayın!
Ya da, bu konulara zaten aşina iseniz, neden Kaçış Yolları sayfasını okumuyorsunuz?