Bu proje, sprint 7 gün 2'de öğrenilen kavram ve teknikleri uygulamanıza ve bunları somut bir projede uygulamanıza olanak tanır. Bugün, React'te Form yönetimini keşfettin. Input kontrolleri, semantik HTML, yayılma operatörü ve işlenmiş özellikler gibi bazı ES6 araçları ve sentetik eventler hakkında bilgi edindin. Projende bu konu ve ilkelerdeki yeterliliğini, her birini kullanarak bir uygulama oluşturarak göstereceksin.
Bu projede, takım üyelerini takip eden bir uygulama ayağa kaldıracaksın ve yapacaksın. Yeni takım oyuncusu ekleyebilecek ve hatta oyuncu detaylarını düzenleyebileceksin.
- Projeyi forklayarak bir kopyasını oluşturun.
- Forku klonlayın
-
npx create-react-app .
komutuyla projeyi oluşturun (SONDAKİ NOKTAYA DİKKAT EDİN!) . -
npm start
komutuyla projeyi başlatın - Projeyi oluşturduğunuz reponun
main
branchi üzerinde commitleyin. - Commitlerinizi pushlayın: git push origin
main
.
- Takım üyelerini içeren listeyi bir stateten render edin.
- Üye listesine yeni bir üye eklemek için bir form oluşturun.
-
useState
hookunu import edin ve takım listesini tutacağınız bir state oluşturun. - State değişkeninize kendi belirleyeceğiniz bir default değer atayın. Ekip üyelerinin listesini takip etmeniz gerekecek ve her ekip üyesinin kendileriyle ilişkilendirilmiş birkaç anahtar/değer(key/value) çifti olacaktır.
- Ekip üyeleri listenizi oluşturun.
- Bir "Form.js" dosyası oluşturun ve form işaretçinizi oluşturun.
-
isim
,email
verol
gibi inputlar oluşturun (backend engineer, frontend engineer, tasarımcı, vb. Hayalgücünüzü kullanın). - Formun state ini düzenlemekten hangi bileşenin sorumlu olduğuna karar vermeniz gerekir. (
Form
un kendisi, ya da parentıApp
). Her yaklaşımın avantajları ve dezavantajları vardır. -
App
içindeForm
bileşeninizi render edin.App
bileşeni,Form
un işini yapması için gereken tüm callbackleri proplar aracılığıyla iletmelidir. (submit(gönder) e basıldığında takım üyeleri listesine yeni üyeler eklenecektir).
Şimdi MVP'yi tamamladığınız! Aşağıdaki esnek görevlere devam edin. Öncelikle üyeleri düzenleme özelliği ekleyin. Bu çok karmaşık bir süreç olduğu için, bu konuda size yardımcı olacak adımlar aşağıda belirtilmiştir.
Daha sonra ekip üyelerini düzenlemek için Form
bileşenini yeniden kullanacağız.
Bu hedefe tamamen kendi başına ulaşmayı deneyebilir veya aşağıdaki adımları takip edebilirsin. Bu adımlar, Form
unun kendi state'ini koruduğunu varsayar.
- Oluşturduğun her üyenin yanına bir düzenleme butonu veya bir düzenleme simgesi(icon) ekleyin.
Buton/simge tıklandığında, o üyeyi
App
daduzenlenecekUye
adlı bir state'e aktarmak istiyoruz. Bunu yapacak fonksiyon, onu çağıran düğme/simge farklı bir bileşende olsa bileApp
içinde tanımlanmalıdır. Fonksiyonu alt bileşene proplarla aktarın.
-
duzenlenecekUye
state iniForm.js
ye aktarın - Eğer
Form
,props.duzenlenecekUye
'yi alırsa, o zaman bu üye nesnesi formu kontrol eden state nesnenizi dolduracak. Şimdi, formumuzdan tıklanan üyeyi düzenlemek için böyle bir şey yapmak cazip gelebilir:const [uye, setUye] = useState(props.duzenlenecekUye || {isim: '', email: '', rol: ''})
. Ancak bu, uygulamamızda oldukça büyük bir hataya neden olacak bir tuzaktır. Prop'lar state'i bu şekilde ayarlamak için kullanılıyorsa, prop değiştiğinde state özelliği GÜNCELLENMEYECEKTİR. Yani... bir şeyi proplar değiştiğinde uyumlu tutmak için ne tür bir teknik öğrendik?useEffect
!props.duzenlenecekUye
yi uyumlu tutabilmek için bir effect yazın.props.duzenlenecekUye
değiştiğinde, effectuye
state nesnesini yeni veriyle güncelleyecek. Bu, inputları güncellemeye çalıştığımız üye bilgileriyle dolduracaktır.
Düzenleme akışını kavramsallaştırmak zordur. Şöyle devam edelim:
- Kullanıcı
Düzenle
butonu/simgesine tıkladığında, takım üyesini güncellemeye başlayacak - App içindeki bir fonksiyon çağırılarak tıklanan üyeyi
duzenlenecekUye
stateine aktaracak. Form.js
,duzenlenecekUye
'yi bir prop olarak alacak, ve eğer prop değişirse, oluşturduğumuz effect nesneyi state'e aktaracak ve formu tıklanan üyenin bilgileriyle dolduracak- Kullanıcı üye bilgilerini düzenleyecek
- Of... Şimdi oluşturulan yeni veriyle ne yapacağız? Eğer formu gönderirsek, yeni bir üye ekleyecek 😫. Sakın korkmayın! Bir sonraki kısımda bunu düzelteceğiz!
Bu, şimdiye kadar yaptığımız en ilginç mimari parça... Ekip üyesi eklemek veya ekip üyesini düzenlemek için kullanılabilecek yeniden kullanılabilir bir form oluşturduk. Yapbozun son parçası şu: formu gönderdiğimiz zaman, bir "uyeEkle" fonksiyonu mu yoksa bir "uyeDuzenle" fonksiyonu mu çalıştırıyoruz? Ve form bunu nasıl bilecek? Aslında formumuz bir üye düzenleyip düzenlemeyeceğimizi biliyor çünkü duzenlenecekUye
propumuz var. (Dipnot. Bunu bir booleanla da tutabiliriz - şunun gibi guncellenecekMi
...)
Tamam, şimdi Form.js
'miz düzenleme mi yapacak yoksa ekleme mi yapacak biliyor, şimdi uygulamayı bitirebiliriz!
-
App.js
içindeuyeDuzenle
adında bir fonksiyon oluşturun. Bu fonksiyon bir ya da birden fazla takım üyesi bilgisini düzenleyip daha aşağıdaki bir bileşene bilgileri aktarsın. State'inizdeki veriniz için bir döngü oluşturmak, istenen takım üyesine ait nesneyi bulmak ve bilgileri güncellemek için bir yol bulmalısınız..map()
metodu bu görev için arkadaşınız olabilir. Verilerinizi doğrudan değiştirmekten de kaçınmalısınız....
yayılma operatörü bu noktada arkadaşınız olacak. - Formu gönderirken
if
leduzenlenecekUye
propu orada mı değil mi kontrol edin, buna göre doğru fonksiyonu çalıştırmak içinif
else
bloklarıyla kontrolünüzü gerçekleştirin.
Yeniden kullanılabilirliğin gücünü gözlemleyin!
Gerekli görevleri bitirdikten sonra çalışmanı daha da ileri götürebilirsin. Bu hedefler, bu modülde öğrendiğin şeyler olabilir veya olmayabilir, ancak az önce çalıştığınız materyal üzerine inşa edilirler. Zaman tanıyın, sınırlarınızı zorlayın ve aşağıdaki isteğe bağlı hedeflere ulaşıp ulaşamayacağınıza bakın:
- Üyeleri düzenlemek için yukarıdaki adımları izleyin. Bunu yapmak zordur ve mimarisi de zordur. Ama pratik yapmak için harika bir projedir! Uygulama ayrıntılarına ve mimariye dikkat edin. Bunu başarmanın birçok yolu var. Bitirdiğinizde, başka bir yol düşünebilir misiniz?
- Her biri kendi ekip üyeleri listesine sahip birden çok ekibi takip edebilmeniz için Uygulamanızın başka bir katmanını oluşturun.
- Form validation hakkındaki çeşitli stratejileri inceleyin. Ekip üyelerinin adı olarak bir sayı girmeye çalışırsanız ne olur? Appiniz buna izin verir mi? Öyle mi? Fieldlardan birinin değerine bir fonksiyon girerseniz ne olur? Bu ne kadar tehlikeli olur? Bunu nasıl engellersin?
- Formları stilleyin. Input etiketleri için statelerine göre üzerine yazılması gerekebilecek bazı tarayıcı varsayılanları vardır (active, focus, hover, vb.); Bu CSS özelliklerini şık hale getirin.