React uygulamasındaki yuva bileşenini test edin
Bu yazı, WordPress geliştiricileri için React Geliştirme Serisinin bir parçasıdır. Son yazımda, Jest kullanarak React bileşen biriminin testini tartıştım. Şaka, temel iddialar ve anlık görüntü testleri için kullanıldığında birçok reaksiyon bileşen fonksiyonunu içerebilir. Arayüzün geliştirilmesinde “nasıl tepki verilir”, bileşenlerin kendileri olan arayüzlerin daha küçük bileşenlerden üretilmesini gerektirir. Jest, her bir bileşeni ayrı olarak test etmemizi sağlar, ancak bileşenlerin birbirine yuvalanırken belirtildiği gibi çalışmasını sağlamamız gerekir.
Bu makalede ayrıca React bileşeni aracılığıyla tekrarlama tartışmaktadır, örneğin, her bir bileşen için Post bileşenleri kullanarak dizi yayınlarını oluşturan yayın bileşenleri yineleyici dizisini kullanarak. Daha fazla gelişimi hızlandırmak için, mevcut bileşenleri yeni bileşenlere akıllıca kopyalamak için komut satırı yardımcı programını nasıl kullandığımı tartışacağım. React uygulamasındaki Nest Bileşenini test etmek, daha önce yazdığım gibi, sahne birkaç bileşene devam etmek, React uygulamasının karmaşıklaştığı yerdir. Birçok katmana giderseniz, “sahne delme problemi” ile sonuçlanırsınız.
Prop sondajı (“iplik” olarak da adlandırılır), React bileşen ağacının bölümlerine veri almak için geçmeniz gereken süreci ifade eder. Kent C. Dodds API bağlamının yeni bir tepki verdiğini söylemeliyim ki bu soruna alternatif bir yaklaşım. Bağlam ateşi çok güçlü, ancak önce bu şekilde öğreneceğim, sonra Wes Boss’un API bağlamında videosunu izleyeceğim ve API bağlamında hangi sorunların “sondaj yardımcıları” ndan daha iyi çözülebileceğini düşüneceğim. Ancak bazı katmanlar için, bu strateji basittir ve pervane ve jest türü neden olduğu sorunları yakalayabilir. Gönderi çizgisinde dönen bileşenler yapalım ve daha sonra Propr türünü mevcut posta bileşenlerine güvenli bir şekilde bağlamak için kullanalım. Bu noktada bileşenleri kopyalamak için GenerAC’ı kullanarak, neredeyse mevcut olanla aynı bileşenlere ihtiyacımız var. Yapmamız gereken tekrarlayan tipleme miktarını azaltmanın bir yolu, mevcut bileşenleri kesmek ve takmak ve sonra stratejik aramak ve değiştirmektir. Sıkıcı ve hatalara eğilimli. Bunun yerine Generac’ı kullanalım. GenerAC, temelde bunu yapan bir modüldür, ancak React bileşeni dikkate alınarak oluşturulur. Bu gerçekten temiz ve çok zaman kazandırıyor. Generac küresel olarak kurulmalıdır, yani bilgisayar başına yalnızca bir kez yapmanız gerekir:
Şimdi, herhangi bir bileşeni kopyalamak için uygulamamızda “GenerAct” komutunu çalıştırabiliriz:
Ekran görüntüsü fikrimle, Gönderi ile dizine geçtiğimi, GeneaAct’a bileşeni kopyalamasını ve yukarıdaki dizinlerden birine koymasını söylediğimi görebilirsiniz. Bu, yayın bileşenlerini ve testleri içeren yayın dizini yapar. düzenli. Önemli bir not. Testi kopyalamanın çok yararlı olması. Anlık görüntüyü kopyalaması, hatalara neden olmayacağı ve jest dosya yolu hakkında karışık olduğu gerçeği. Genellikle anlık görüntü klasörünü silip Jest’in geri gelmesine izin veririm. Anlık görüntüler geçersiz. React bileşeninde llooping şimdi bileşenlerimiz için bir başlangıç yapıyoruz, ancak birincisi ile aynı. Bu, gönderiyi tekrar etmeli ve gönderiye iletmelidir. Yapılacak ilk şey, “Posta” a gönderilecek ve dizi içermek için proptype’u güncellemektir. Diziyi belirlemek için proptypes.array kullanabilsem de, gerçekten istediğim bu değil. Herhangi bir dizi istemiyorum. WordPress yayınları şeklinde nesneler içeren bir dizi istiyorum. Bu yüzden proptypes.arrayof kullanıyorum. Bunu, örneğin, yalnızca bir dize içeren bir diziyi belirlemek için kullanabilirim. Bu durumda, zaten sahip olduğum yazı biçimini kullanıyorum:
Harita ve Foreach arasındaki fark, Foreach’in her yinelemenin değerini döndürmemesidir. Bu, koleksiyondaki her veya birkaç öğeyi doğrulamak veya değiştirmek için kullanışlıdır. Öte yandan harita, her yinelemenin değerini geri yükler. Bu nedenle foreach map () ‘dan daha hızlıdır, ancak map (), dizideki her öğe için React bileşenini iade etmemiz gerektiğinde kullanılabilir. İhtiyacımız olan bu – her gönderiyi tekrarlayın ve oluşturulan posta bileşenini döndürün. İşte döngü:
“Anahtar” arabelleği gerekli bir adım olduğu için döngüyü görmek için burada büyütüyorum, ancak açık değil. Anahtar özel bir destektir. React yalnızca gerektiğinde DOM güncellemek için tasarlanmıştır. Döngülerle karmaşıklaşır.
React, dizideki Madde 3’ün değiştiğini nasıl bilebilir? React’in çok yuvalanan tüm nesneler için diziyi analiz ettiğini ve diziyi en son gördüğü zamanla karşılaştırdığını düşünebilirsiniz. Bunu düşünürseniz, üzüntüye üzüleceksiniz, benim gibi tepki öğrenmeye başladığımda ve durumdaki değişiklikler oluşturulmaz. Neden? Niye? React, yuvalama dizisi özelliğini karşılaştırmaz. Bunun dizide benzersiz bir öğe olduğunu tepki vermek için “anahtar” propr’u kullanıyoruz. Bu bağlamda bir posta kimliği kullanmak, benzersiz bir kimlik olarak çok iyidir, çünkü öyle. Aşağıdakiler tüm bileşenler:
Bir döngü eklediğimde anlık görüntü değiştiği için başarısız olduğum test başarısız oldu. Bir kez daha, değişiklikleri kontrol ettim, istediğime karar verdim ve sonra yeni bir özellik aldım.
Prop türünü yeniden kullanarak, aynı tür pervane ile iki bileşene sahip olduğunu biliyorum. İki yerde çok benzer bir şey yapan aynı kodum var. Kötü kokuyor. Bunu yaptığımda bunun bir sorun olduğunu biliyorum, ama hemen üstesinden gelmek istemiyorum. Aynı zamanda çok fazla değişiklik, test başarısızlığının anlamsız olduğu anlamına gelir. Ancak, bu düzeltmek istediğim bir sorun.
Bir test yaptığım için, değişiklik yaptığımda hasarlı bileşenlerin olmadığını bileceğim. Bunu başarmak için şekli kendi dosyasına kopyaladım:
Daha sonra bunu yazı bileşenindeki yazı yayınlarım için olduğu gibi kullanabilirim:
Ayrıca, PROPTYPES.Arrayof () ‘da yayınlar bileşenlerindeki pervane yayınları için de kullanabilirim:
Dikkat ederseniz, PostShape’e pervane kimliği ekliyorum. Yazımın açıklaması eksik ve hala değil. Şimdi, geliştirdiğimde, tek bir yerde değişiklik yapmam gerekiyor. Bu sabite gönderme biçimini yönetmek için tek bir sorumluluk belirleyerek, bu şekli değiştirmek için korunabilecek bir yolum var. Ya TypeScript veya Flow? Bu dizideki son yazımda, React’te pervane türü sınavı için set tipi ayarları tartıştım. Bu araç nedeniyle neden sık sık akış veya yazı tipine ihtiyaç olmadığını düşündüğümü söylüyorum. Sanırım son adımın – bir yazı için tekrarlanabilecek bir form oluşturduğunu – temel olarak yeniden oluşturan TypeScript. TypeScript, nesneler için OOP PHP’deki PHP arayüzü gibi şekli belirlemenizi sağlar. Şu anda web ve eklenti uygulamaları arasında reaksiyona girme bileşenlerini paylaşmak için bir NPM modülü geliştiriyorum. API istemcileri için akış kullanıyorum. Modülüm React kullanmadığından ve tüm HTTP testlerim yapay veriler kullandığından, tip incelemesi benim için çok önemlidir. Akış ve TypeScript JavaScript’e derlendiğinden, tip incelemesi daha sonra gerçekleşir. Ateş veya Crud müşterisi gibi daha sert bir proje için iyi. Kullanıcı arayüzü için, pervane türünün sadeliğini seviyorum. Ayrıca, yeni geliştiriciler tarafından incelenecek olan bir şey. Bileşendeki olayları test etmek şu ana kadar tepki veriyor, yalnızca içerik oluşturan, ancak bunları güncelleyen bileşenleri görüyoruz. Ya bir form istiyorsak?
Nasıl çalıştığına bakalım. İlk olarak, sorumluluk hakkında konuşalım. Bu bileşeni “aptal” tutmak istiyoruz – yenileme statüsünün mantığı onun işi değil. Bu, ebeveynlere değer değişikliklerini iletmek için sahne ve işlevlere aktarılacaktır. Ebeveynin çalışma şekli bileşenlerle alakasız kalmalıdır. Değişikliğinizin işlenmesini ayırmak yeniden kullanmak çok önemlidir. Bileşenleriniz, Redux veya Gutenberg bloğunda durumu yönetmek için bir bileşen kullanılarak küçük uygulamalarda kullanılabilirse, üç sistemin bileşenlerini ayırmanız gerekir. Bir kez daha, bağımlılık enjeksiyon prensibi geçerlidir. Değişiklik işleyicisi, programın diğer bölümlerinin bağımlılığıdır, bu nedenle bileşene devam ederiz. Başlamak için, Generac’ı son kez aynı şekilde, posta bileşeninin bir kopyasını yapmak ve Güvenlikçi olarak adlandırmak için kullanıyorum. Daha sonra yeni bir prop tipi-onchange ekledim. Bir işlev için bir pervane tipi kullanıyorum ve gerekli hale getiriyorum. Anlık görüntü testi hemen bir hata yaptım çünkü bu pervane yoktu. Bunu düzeltmek için, testi gerçekten hiçbir şey yapmayan bir işlev verilecek şekilde güncelledim.
Bu birim testi artık doğru bileşeni sağlarken bileşenin doğru bir şekilde oluşturulduğunu kanıtlamaktadır. Bu Tanrı, ama bunun bileşenin yayınları düzenleyebileceği anlamına geldiğine inanmayacağım. Giriş düzenleyicisindeki değişiklik olayını simüle ederek test etmemiz gerekiyor. Giriş formu ve değişiklik işleme fonksiyonel reaksiyon bileşenleri için bence, bir bileşen, değiştirme işleyicisi işlevi aracılığıyla ebeveynine iletildiği değeri oluşturmaktan sorumludur. Başlıklar, içerik ve yazarlar ve taksonomi yayınları için değişiklik yapmak istemiyorum. Bu çok fazla. Gönderi güncellendiğinde yayın ve işlevin çağrılmasına devam etmek istiyorum. Bu, bileşenin olay nesnesini almak, değerini çıkarmak ve orijinal gönderi ile birleştirmekten sorumlu olduğu anlamına gelir. Bu bazı endişeler. Burası sınıfa geçtiğim yer değil. Evet, birkaç kapanışa ihtiyacım var, burada yapabilirim. Birincisi, bu, güncellemeyi ve mevcut değeri birleştirmekten sorumlu olan bileşenin içi değişim işleyicimizin işlevidir: Postdit bileşeni, yayının bir kopyası olarak başlar. Giriş başlığı için girişe sahip olmak için güncelleyelim, Giriş Değişikliği olayında Onchange özniteliğine çağrılacak işlevi sürdürmek de dahil olmak üzere aynı HTML giriş kuralları burada geçerlidir. Aşağıdaki giriş:
Burada, etkinliği almak, değeri almak ve iç değişikliğimin denetleyicisi için girdi yapmak için kapanışı kullanıyorum. Şimdi burada tüm bileşenler: