State Nerede Yaşamalı? — Bileşen, Üst Bileşen, Context, Cache, URL
Önce şunu oku: React Render Modeli
30 saniyede özet
Her state'i tek bir global yere koymak kolay görünür, ama yeniden çizim fırtınası, kaybolan filtreler ve bayat sunucu verisi getirir. Her parça için üç soru sor: kimler kullanıyor, sunucudan mı geliyor, paylaşılabilir mi olmalı?
Evinde her şeyi salona yığdığını düşün: diş fırçası, kumanda, süt, ev adresinin yazılı olduğu kâğıt. Her şeyi bulmak kolay gibi görünür, çünkü hepsi tek yerde. Ama salon kısa sürede kimsenin oturamadığı bir depoya döner.
-
Bayt: Bankacılık uygulamasında bütün state'i tek bir global context'e koyduk. Her şey tek yerde!
-
Sen: Tutar alanına yazınca bütün ekran takılıyor. Filtre de yenilemede kayboluyor.
-
Bayt: Bir de başka sekmede havale yapınca bakiye eski kalıyor...
-
Bayt: Belki her parçanın ayrı bir yeri olmalı. Tek tek bakalım.
Kim kullanıyor?
Yalnızca bir bileşen kullanıyorsa state onun içinde yaşar. Havale formunda yazılan tutar böyledir: başka hiçbir ekranı ilgilendirmez.
İki kardeş bileşen aynı değeri paylaşıyorsa, state ortak üst bileşene taşınır: lifting state upİki kardeş bileşenin paylaştığı state'i ortak üst bileşenlerine taşımak. Üst bileşen değeri props ile ikisine de verir; ikisi hep aynı şeyi gösterir.Sözlükte gör →. Üst bileşen değeri props ile ikisine de verir ve ikisi hep aynı şeyi gösterir.
Kafam karıştı, daha basit anlat
Tek kullanan varsa onun içinde. İki kardeş paylaşıyorsa ortak üst bileşende.
Yalnızca havale formunun kullandığı, yazılan tutar nerede yaşamalı?
Üst bar ve havale formu aynı seçili hesabı göstermeli. Seçim nerede yaşamalı?
Global neden her şey değil?
Yazılan tutar, 12 bileşenin okuduğu global bir context'te tutuluyor. Kullanıcı 6 hane yazdı. Kaç bileşen yeniden çizilir? Cevabı göster
Her tuşta 12, toplam 72. Context değeri değişince onu okuyan her bileşen yeniden çizilir. Tutar yalnızca formdaysa her tuşta 1 bileşen, toplam 6 çizim yeter.
Adım adım oku
- Her şeyi salona yığmak: dağınıklık.
- Diş fırçası kendi banyonda, kumanda salonda.
- Sütün tarihi kutuda, ev adresi kapıda.
- Her şey onu kullananlara en yakın yerde.
contextReact'te bir değeri props zinciri olmadan derindeki bileşenlere ulaştıran yol. Değer değişince onu okuyan her bileşen yeniden çizilir.Sözlükte gör →, uygulamanın her yerinden okunan ve az değişen değerler içindir: tema, dil, oturumdaki kullanıcı. Sık değişen bir değeri oraya koyarsan, okuyan her bileşen her değişiklikte yeniden çizilir.
Sunucudan gelen bakiye ise başka bir türdür: sunucu state'iAsıl sahibi sunucu olan veri: bakiye, hareketler. Ekranda tutulan hâli bir önbellektir; başka bir yerde değişince bayatlar ve yeniden istenmelidir.Sözlükte gör →. Onun asıl sahibi sunucudur; ekrandaki elle tutulan kopya, başka bir sekmede havale yapılınca bayatlar. Bir query cache onu yeniden ister.
Paylaşılması gereken bir filtre ise URL’de yaşar, böylece yenilemede ve linkte kalır.
Kafam karıştı, daha basit anlat
Context az değişen genel değerler için. Sunucu verisi cache’te, paylaşılacak görünüm URL’de.
Sık değişen bir değeri 12 bileşenin okuduğu bir context'e koymanın bedeli nedir?
Sunucudan gelen bakiyeyi bir query cache'e bırakmanın faydası nedir?
Kendin gör
State nerede yaşamalı?
Tohum 561119Havale formunda yazılan tutar
Yeri: Global context
Senaryo: Kullanıcı tutar alanına 6 hane yazdı
· bekliyor
Seçili hesap (üst bar ve form)
Yeri: Global context
Senaryo: Kullanıcı üst bardan başka bir hesap seçti
· bekliyor
Hareket listesi filtresi
Yeri: Global context
Senaryo: Sayfa yenilendi ve link bir iş arkadaşına gönderildi
· bekliyor
Hesap bakiyesi (sunucudan)
Yeri: Global context
Senaryo: Başka bir sekmede havale yapıldı, bu sekmeye dönüldü
· bekliyor
Her parçanın yerini yukarıdan seç, sonra oynat: her adım bir senaryo.
Şu an ne oldu?
Hepsi: Global context
Dört senaryo oynanacak; her biri bir parçanın yerini sınayacak.
Görevler0/3
Tutarı yazarken 72 yeniden çizim yaptıraçık
İpucu
Varsayılan ayarlar yeter.
Bakiyeyi bayatlataçık
İpucu
Sunucu verisini elle tut.
Dört senaryoyu da sorunsuz geçiraçık
İpucu
Her parça için: kimler kullanıyor, nereden geliyor?
Olay günlüğü (0)
Henüz olay yok. Oynat veya adımla.
- Varsayılanla oynat. Her şey global context’te: hiçbir senaryo sorunsuz geçmedi.
- Tutarı “Bileşenin kendi state’i”ne al. 72 yeniden çizim 6’ya indi.
- Seçili hesabı önce “Bileşenin kendi state’i”ne, sonra “Ortak üst bileşen”e al. İlkinde üst bar ile form ayrıştı, ikincisinde aynı kaldı.
- Filtreyi “URL”ye, bakiyeyi “Sunucu cache’i”ne al. Dört senaryo da sorunsuz.
Hareket listesinin filtresi yenilemede kayboluyor. Çözüm nedir?
Seçili hesap iki kardeş bileşende ayrı ayrı useState ile tutuluyor. Kullanıcı üst bardan hesap değiştirdi. Ne olur?
Tuzaklar
Sunucu verisini kopyalamak. Bakiyeyi bir kez çekip useState’e koymak, onu sunucudan koparır. Sunucu verisini bir query cache’e bırak ve bir değişiklikten sonra o kaydı geçersiz kıl.
Türetilebilen değeri state’te tutmak. Hareketlerin toplamı, hareket listesinden hesaplanabilir. Ayrı bir state’te tutarsan ikisi bir gün uyuşmaz; her çizimde hesapla.
Prop’ları on kat aşağı taşımak. Bir değeri ona hiç bakmayan beş bileşenin içinden geçirmek de bir sinyaldir. Değer gerçekten genelse context’e, değilse onu kullanan bileşene daha yakın bir yere taşı.
Kafam karıştı, daha basit anlat
Sunucu verisini kopyalama, türetileni hesapla, prop zincirini kısalt.
Hareketlerin toplamı ayrı bir state'te tutuluyor ve bir gün listeyle uyuşmuyor. Ne yapılmalı?
Aşağıdaki örnek bir bankacılık uygulamasından: formda yerel tutar, ortak üstte seçili hesap, URL’de filtre ve query cache’te bakiye.
Derinleş · Bankacılık uygulaması: dört state, dört ayrı yer 4 dosya · ~56 satır · ilk okumada atlayabilirsin
Kendini sına
Yalnızca bir bileşenin kullandığı değer o bileşenin içinde yaşamalıdır.
Havale gönderildikten sonra bakiye ekranda eski kalıyor; bakiye bir query cache'te. Eksik olan nedir?
Aklında kalacak üç şey
- 1 State'i onu kullanan bileşenlere en yakın yere koy. Yalnızca bir bileşen kullanıyorsa onun içinde, iki kardeş paylaşıyorsa ortak üst bileşende yaşamalı.
- 2 Sunucudan gelen veri bir kopya değil, bir önbellektir. Onu bir query cache'e bırakırsan yeniden ister, bayatlamaz ve birden çok ekran aynı kaydı paylaşır.
- 3 Yenilemede kalması ya da bir linkle paylaşılması gereken görünüm, örneğin bir filtre, URL'de yaşamalı.
4 kart sonraki derste seni bekliyor
Bu dersin üstüne kurulanlar
Bunlar bu dersi temel alıyor; hazır olduğunda devam edebilirsin.