2021’de web bileşenlerine tam giriş

Hepimizin yapmak istemediğimiz bir projesi var. Kod düzensiz hale gelir, kapsam gelişir, hızlı onarımlar diğer iyileştirmelerin üzerine uygulanır ve yapı spagetti kodunun ağırlığı altında çöker. Kodlama dağınık bir iş olabilir.
Ücretsiz demoyu deneyin
Proje, tek bir sorumluluğu olan basit ve bağımsız modüllerin kullanımından yararlanır. Diecapsülasyonun modüler kodları, bu nedenle uygulanması konusunda endişelenmenize gerek yoktur. Bir dizi giriş verildiğinde modülün ne üreteceğini bildiğiniz sürece, modülün bu hedefe nasıl ulaştığını anlamanıza gerek yoktur.
Bir programlama diline modüler kavramlar uygulamak çok kolaydır, ancak web geliştirme çeşitli teknolojilerin bir karışımını gerektirir. Tarayıcı, içerik, stil ve sayfa işlevselliğini oluşturmak için HTML, CSS ve JavaScript’i ayrıştırır. Her zaman kolayca karışmazlar çünkü:
İlgili kodlar üç veya daha fazla dosya arasında bölünebilir ve
Global Style ve JavaScript nesneleri birbirine beklenmedik bir şekilde müdahale edebilir.
Bu sorunlar, dil çalışma zamanı, çerçeve, veritabanları ve sunucuda kullanılan diğer bağımlılıkların karşılaştığı sorunlar dışında.
Web bileşeni nedir? Web bileşeni, herhangi bir sayfada tek bir devre dışı kodlanmış kodlanmış sorumluluk kodu oluşturmanın bir yoludur.
html düşünün. URL göz önüne alındığında, izleyiciler dönme, duraklamalar, geriye doğru, ileri ve hacmi ayarlama gibi kontrolü kullanabilir. Stil ve işlevsellik sağlanır, ancak çeşitli JavaScript yangın özellikleri ve çağrıları kullanarak değişiklikler yapabilirsiniz. Bir dizi öğeleri diğer etiketlere yerleştirilebilir ve çatışmayacaktır. Ya kendi özel işlevinize ihtiyacınız varsa? Örneğin, sayfadaki kelime sayısını gösteren öğeler? Hayır html (henüz değil). React ve Vue.js gibi çerçeve, geliştiricilerin içerik, kuvvet ve işlevselliğin bir JavaScript dosyasında belirlenebileceği web bileşenleri oluşturmasına olanak tanır. Bu, birçok karmaşık programlama problemini çözer, ancak şu unutmayın: Çerçeveyi nasıl kullanacağınızı öğrenmeniz ve kodunuzu geliştikçe güncellemeniz gerekir.
Bir çerçeve için yazılmış bileşenler nadiren başka biriyle uyumludur.
Popülaritesi ve düşmeleri için çerçeve. Geliştirme ekibinin ve kullanıcının isteklerine ve önceliklerine güveneceksiniz.
Standart web bileşenleri, yalnızca JavaScript’te (Shadow Dom gibi) elde edilmesi zor olan tarayıcı işlevselliği ekleyebilir.
Neyse ki, kütüphanede tanıtılan popüler kavramlar ve çerçeve genellikle web standartlarına dahil edilir. Biraz zaman aldı, ancak web bileşeni gelmişti.
Bir programlama diline modüler kavramlar uygulamak çok kolaydır, ancak web geliştirme çeşitli teknolojilerin bir karışımını gerektirir. Bu kılavuzda daha fazla bilgi edinin yan Kısa Geçmiş Tweet Web Bileşeni için Tıklayın Satıcıların özel ilk hatalarının çoğunu takip eder, standart web bileşeni kavramı ilk olarak 2011 yılında Fronteers konferansında Alex Russell tarafından tanıtıldı. Google Polimer Kütüphanesi (Polyfill Mevcut teklife dayanarak) yıllar sonra, ancak ilk uygulama 2016 yılına kadar Chrome ve Safari’de görünmedi. Tarayıcı satıcılarının ayrıntıları müzakere etmek için zamana ihtiyacı vardı, ancak Web bileşeni 2018’de Firefox’a ve 2020’de Edge’e eklendi (Microsoft değiştirildiğinde Birkaç geliştirici web bileşenlerini benimsemeye istekli veya kabul edebiliyor, ancak sonunda istikrarlı bir yangınla iyi bir tarayıcı desteğine ulaşıyoruz. Hepsi mükemmel değil, ancak çerçeveye dayalı bileşenler için giderek daha uygun bir alternatif. En sevdiğinizden kurtulmak istemeseniz bile, her bir çerçeveyle web uyumlu bileşen ve yangın önümüzdeki yıllarda desteklenecektir. Önceki web bileşeni deposu herkesin görmesi için mevcuttur:
Webcomponents.org
Bileşen galerisi
jenerik bileşen
Web-Component-Örnek
Harika
Erişilebilir. Bileşenler
UI Kickstand
… Ama kendi kodunuzu yazmak daha eğlenceli!
Bu öğretici, JavaScript çerçevesi olmadan yazılmış Web bileşenlerine tam bir giriş sağlar. Ne olduğunu ve web projenize nasıl uyarlayacağınızı öğreneceksiniz. HTML5, CSS ve JavaScript hakkında bilgiye ihtiyacınız var. Web bileşenleriyle başlayarak Web bileşenleri gibi özel HTML öğeleridir. Ad, HTML spesifikasyonlarında resmi olarak desteklenen öğelerle asla çatışmaması için bir bağlantı işareti içermelidir. Elemanları kontrol etmek için ES2015 sınıfını tanımlamanız gerekir. Bu herhangi bir şey olarak adlandırılabilir, ancak Helloworld genel bir uygulamadır. Her bir HTML öğesinin varsayılan özelliğini ve yöntemlerini temsil eden HTMLElement arabirimini genişletmelidir. Not: Firefox, HTMLParagraphElement, HTMLimageElement veya HTMLButtonElement gibi bazı HTML öğelerini genişletmenize izin verir. Bu, diğer tarayıcılarda desteklenmez ve Shadow Dom oluşturmanıza izin vermez. Yararlı bir şey yapmak için sınıf, öğe belgeye eklendiğinde çağrılan connectcallback () adlı bir yöntem gerektirir: sınıf hellovorld htmlelelElement {// connect connect connectcallback () {this.textconcent = ‘hello world!’; }} Bu örnekte, öğe metni “Merhaba Dünya” olarak ayarlanmıştır. Sınıflar, belirli öğeler için işleme olarak tanımlamak için CustomElementRegistry’ye kaydedilmelidir:
Customelements.define (‘Hello-World’, Helloworld); Tarayıcı artık JavaScript yayınlandığında öğesini Hellovorld sınıfınızla ilişkilendiriyor (örn. Artık özel bir unsurunuz var! CodePen Gösterisi Bu bileşen, diğer öğeler gibi CSS’de düzenlenebilir: Hello-World {font-weight: bold; Kırmızı renk; } Bu bileşenin özniteliğini ekle, aynı metin yayınlandığı için kullanışlı değildir. Diğer öğeler gibi, html öznitelikleri ekleyebiliriz: Bu metne “Merhaba Craig!” görüntülenir. Bunu başarmak için, her nesne yapıldığında çalıştırılan Hellovorld sınıfına bir yapıcı () işlevi ekleyebilirsiniz. Bu: ana htmlElement’i başlatmak için süper () yöntemini arayın ve
Diğer başlatma yapın. Bu durumda, varsayılan “dünya” olarak ayarlanan ad özelliğini tanımlayacağız:
Helloworld sınıfı htmLElement {constructor () {süper (); this.name = ‘dünya’; } // Daha fazla kod … bileşeniniz yalnızca ad özniteliğini önemsiyor. Statik gözlemlenen özellik () gözlemlenecek özellik dizisini geri yüklemelidir: // bileşen öznitelikleri Statik Get Gözlemedtributes () {return [‘name’]; } AttributeChangedCallback () yöntemi, öznitelikler HTML’de tanımlandığında veya JavaScript kullanılarak değiştirildiğinde çağrılır. Bu, mülkün adını, eski değeri ve yeni değeri geçer:
// öznitelik değişikliği attributeChangedCallback (özelliği, OldValue, NewValue) {if (OldValue === newValue) dönüş; Bu [mülk] = newValue; } Bu örnekte, yalnızca ad özelliği güncellenir, ancak gerektiğinde ek özellikler ekleyebilirsiniz. Son olarak, connectCallback (): // Connect ConnectedCallback () {this.textContent = `Hello $ {this.name}! } Gösteri CodePen Tarayıcı Yaşam Döngüsü yöntemi, web bileşeni durumunun yaşam döngüsü boyunca otomatik olarak altı yöntem çağırır. Yukarıdaki örnekte ilk dördü görmüş olsanız bile, tam liste burada mevcuttur: İlk bileşen başlatıldığında yapıcı () çağrılır. Super () çağırmalı ve herhangi bir varsayılanı ayarlayabilir veya diğer ön oluşturma işlemlerini yapmalıdır. Gözlenen özellikler, tarayıcı tarafından gözlemlenecek öznitelik dizisini statik () geri yükler. ATICTIBITEDCallback (PropertiName, OldValue, NewValue), gözlemlenen özellikler her değiştirildiğinde çağrılır. HTML’de tanımlanan doğrudan iletilecektir, ancak JavaScript bunu değiştirebilir: Document.querySector (‘Hello-World’). SetAttribute (‘Name’, ‘Herkes’);
Bu yöntemin şu anda oluşturmayı tetiklemesi gerekebilir. Bağlı () Ters Çağrılar Bu işlev, Web bileşeni Belge nesne modeline eklendiğinde çağrılır. Gerekli renderlemeyi gerçekleştirmelidir. Web bileşeni belge nesne modelinden silindiğinde bu geri çağrı bağlantısı kesildi () çağrıldı. Bu, depolanan durumu kaldırmak veya AJAX isteklerini iptal etmek gibi temizlemeniz gerekiyorsa yararlı olabilir. Ters Çağrıları Evlat edinilen () Bu işlev, web bileşeni bir belgeden diğerine taşındığında çağrılır. Herhangi bir vakayı düşünmek için mücadele etsem bile bunun için kullanımlar bulabilirsiniz! Web bileşenlerinin diğer öğelerle nasıl etkileşime girdiği Web bileşenleri, JavaScript çerçevesinde bulamayacağınız birkaç benzersiz işlev sunar. DOM Shadow Yukarıda işlev gördüğümüz web bileşeni olsa da, dış girişimlere karşı bağışık olmasa da ve CSS veya JavaScript bunu değiştirebilir. Aynı şekilde, bileşenleriniz için belirttiğiniz kuvvet, başkalarını sızdırabilir ve etkileyebilir. Gölge Dom, bu kapsülleme problemini web bileşenine ayrı bir DOM ekleyerek çözün: const shadow = this.attachshadow ({mode: ‘kapalı’}); Mod aşağıdakiler şeklinde olabilir: “Open” – Dış sayfadaki JavaScript, Shadow Dom’a (Eleman.ShadowRoot’u kullanarak) erişebilir veya
“Kapalı” – Shadow Dom yalnızca web bileşeninde erişilebilir.
Shadow Dom diğer Dom öğeleri gibi manipüle edilebilir:
Bültenlere Kaydolun
Trafiğimizi%1000’den fazla nasıl artırdığımızı bilmek ister misiniz? Haftalık bültenimizi içerideki WordPress insanlar hakkında ipuçlarıyla alan 20.000’den fazla insana katılın!
Şimdi abone olun
ConnectCallback () {const shadow = this.attachshadow ({mode: ‘kapalı’}); Shadow.innerHtml = ` P {Text-Aign: Center; yazı tipi-ağırlık: normal; Dolgu: 1em; Marj: 0 0 2EM 0; Arka Plan rengi: #EEE; Sınır: 1 piksel katı #666; }
merhaba $ {this.name}!
`; } Bileşen şimdi
​​öğesinde “Halo” metnini oluşturuyor ve düzenliyor. Yazı tipleri ve renkler gibi bazı stiller, açıkça tanımlanmadığı için sayfadan miras alınmasına rağmen, bileşen dışındaki JavaScript veya CSS tarafından değiştirilemez. Bu Web bileşeninde ele alınan CodePen kuvvet gösterileri, sayfadaki diğer paragrafları veya hatta bileşenini etkileyemez. CSS: Ana Bilgisayar Seçicisi, Web bileşeninin içinden öğelerini düzenleyebilir :: Host {Transform: Rotate (180DEG); } Element belirli bir sınıf kullandığında uygulanacak kuvveti de ayarlayabilirsiniz, örneğin :: host (.rotate90) {dönüşüm: rotate (90deg); } Html şablonları, komut dosyasındaki HTML’yi tanımlamak daha karmaşık web bileşenleri için pratik olabilir. Bir şablon, sayfanızda web bileşeniniz tarafından kullanılabilecek bir HTML parçası belirlemenizi sağlar. Birkaç faydası vardır:
JavaScript’inizdeki dizeyi yeniden yazmak zorunda kalmadan HTML kodunu değiştirebilirsiniz.
Bileşenler, her bir tür için ayrı bir JavaScript sınıfı yapmak zorunda kalmadan özelleştirilebilir.
HTML’yi HTML’de tanımlamak daha kolaydır – ve bileşen oluşturulmadan önce sunucuda veya istemcide değiştirilebilir.
Şablonlar etiketinde tanımlanır ve kimliği belirlemek için pratiktir, böylece bunları bileşen sınıfına yönlendirebilirsiniz. Bu örnek, “Merhaba” mesajını görüntülemek için üç paragraftır: p {text-align: center; yazı tipi-ağırlık: normal; Dolgu: 0.5EM; Marj: 1px 0; Arka Plan rengi: #EEE; Sınır: 1 piksel katı #666; }
> web bileşeni Sınıf, kullanıldığı her yerde benzersiz bir Domic parçası oluşturduğunuzdan emin olmak için bu şablona erişebilir, içeriğini ve klonlama öğelerini alabilir: const template = document.petElementById (‘hello-world’). content.cloneneode (true); DOM doğrudan Shadow DOM: ConnectedCallback () {const Shadow = this.attachshadow ({mode: ‘kapalı’}), template = document.getElementById (‘Hello-world’). Content.clonenode (true) ‘a değiştirilebilir ve eklenebilir. , hwmsg = `hello $ {this.name}`; Array.from (Template.querySelectorLal (‘. Hw-Text’)). Shadow.Append (şablon); } Gösteri Codepen yuvası şablonu yuvası şablonu ayarlamanızı sağlar. Yakınınızdaki Web bileşenini kullanmak istemek, ancak mesajı Shadow Dom’a

başlıkına koyun. Bu kodu yazabilirsiniz:

hello varsayılan! “msgtext”>
Merhaba Varsayılan! “(

),” msgtext “olarak adlandırılan olduğu bir noktaya girilir.
bir dizi yuva adı yoktur, ancak ‘da kullanılır Bir sonraki ad kullanılabilir.Sonuç olarak, şablon: size rekabet avantajı sağlayan bir barındırma çözümüne mi ihtiyacınız var?Kinsta, olağanüstü hız, sofistike güvenlik ve otomatik ölçekte size yardımcı olur.Planımıza bakın

merhaba varsayılan! Bileşen. Shadow DOM’daki öğesi, yalnızca arayarak erişebilirsiniz, ardından çocuk dizisini geri yüklemek için ApsignNodes () yöntemini kullanarak erişebilirsiniz. Update connectCallback () yöntemi: connectCallback () {const shadow = this.attachshadow ({mode: ‘kapalı’}), hwmsg = `hello $ {this.name}`; // Shadow Dom Shadow.Append (Document.GetElementById (‘Hello-World’). Concent.clonenode (true); // HW-Text sınıfı dizisi ile tüm yuvaları bulun (Shadow.querySelectorLal (‘slot.hw-text’)) // ilk olarak adanmış slotta (n => n. atanmışNodes () [0] güncelleme. textContent = hwmsg); } Codpen gösterisi Ek olarak, web bileşeninizdeki belirli yuvaları hedefleyebilseniz bile, eklenen öğenin kuvvetini doğrudan düzenleyemezsiniz: yuvası [name = “msgtext”] {color: yeşil ; } Yuva şablonu biraz sıra dışı, ancak bir avantaj içeriğiniz olacak JavaScript çalışmazsa görüntülenir. Bu kod, yalnızca web bileşeni sınıfı başarıyla çalıştırıldığında değiştirilen varsayılan başlıkları ve paragrafları gösterir:

Merhaba Varsayılan!

Bu Metin bileşenin bir parçası olacak.
Bu nedenle, sadece “JavaScript’e ihtiyacınız var” mesajı olsa bile, bazı ilerici iyileştirme biçimlerini uygulayabilirsiniz! Yukarıdaki Dom’un gölge bildirim örneği, JavaScript’i kullanarak Shadow Dom’u yapar. Hala tek seçenek, ancak deneysel bildirici DOM Chrome için geliştiriliyor. Bu, sunucu tarafının stil olmadan düzenin veya içeriğin yanıp sönmesindeki kaydırmayı ve kaçınmayı sağlar. Aşağıdaki kod, son bölümde yaptığınız şeyle aynı olan Shadow Dom’u yapan HTML ayrışmasıyla algılanır (gerektiğinde bir mesajı güncellemeniz gerekir):

merhaba varsayılan!

Bu metin bileşenin bir parçası olacaktır. Bildirici Gölge Dom hakkında daha fazla bilgi edinebilirsiniz ve Polyilfill basittir, ancak uygulamanın değişebileceğine dikkat edilmelidir. Web bileşeninizin Shadow Dom’daki herhangi bir öğeye olayları ekleyebileceği Shadow Dom, DOM’da yaptığınız gibi, etkinliği dinlemek gibi, Shadow.AddeventListener (‘Click’, E => {// bir şey yapın});
Yayılmayı durdurmazsanız, etkinlik DOM sayfasına gidecek, ancak etkinlik tekrar hedeflenecek. Bu nedenle, içindeki unsurlardan ziyade özel unsurlarınızdan geliyor gibi görünüyor. Web bileşenlerini, yaptığınız Web bileşeninin diğer çerçevelerindeki tüm JavaScript çerçevelerinde çalışır. Hiçbiri HTML elementini bilmiyor veya umursamıyor- bileşeni,
ile aynı şekilde ele alınacak ve sınıfın etkinleştirileceği DOM’a yerleştirilecektir. Custom-Elements-Everywhere.com, çerçeve ve web bileşeni kayıtlarının bir listesini sunar. React.js’nin çeşitli zorlukları olmasına rağmen, çoğu tamamen uyumludur. JSX: Import React ‘React’ dan kullanmak mümkündür; ‘React-Dom’dan reaksiyonun içe aktarılması; ‘./Hello-world.js’ ‘den alın; İşlev myPage () {return ( ); } Reactdom.render (, document.getElementById (‘kök’)); … Ancak: React, ilkel veri türlerini yalnızca HTML özniteliklerine (dizi veya nesneler değil) iletebilir
React web bileşeni olaylarını dinleyemez, bu nedenle kendi işleyicinizi manuel olarak eklemeniz gerekir.
Eleştiri ve Web Bileşeni Sorunları Web bileşenleri önemli ölçüde artmıştır, ancak bazı yönleri yönetmek zor olabilir. Web bileşenlerini düzenlemedeki zorluklar, özellikle kapsam stilini değiştirmek istiyorsanız, çeşitli zorlukları artırır. Birçok çözüm var:
Shadow Dom kullanmaktan kaçının. Diğer JavaScript yanlışlıkla veya değiştirmek için kötü olabilir, ancak doğrudan özel öğelerinize içerik ekleyebilirsiniz.
Sınıf kullanın: Host.Yukarıda gördüğümüz gibi, CSS, sınıf özel öğelere uygulandığında belirli stillerin uygulanmasına dahildir. Bkz. Özel CSS (değişken) özellikleri.Özel özellik web bileşenine akar, böylece öğeniz var (-renk) kullanıyorsa, harici bir kapta (kök gibi)-renk-renk ayarlayabilirsiniz ve kullanılacaktır.
Gölgeden yararlanın.Seçmenler :: Part () Yalnızca Parça öznitelikleri olan dahili bileşenleri düzenleyebilir, yani

bileşeninde Hello-World :: Part (başlık) seçmenleriyle düzenlenebilir.
Bir dizi stil verin. bloğuna uygulanacak bir özellik olarak devam edebilirsiniz.
Hiçbir şey ideal değildir ve diğer kullanıcıların web bileşenlerinizi nasıl dikkatli bir şekilde ayarlayabileceğini planlamanız gerekir. Gölge DOM’da her bir alanı göz ardı eden giriş , veya , içeren formla otomatik olarak ilişkili değilsiniz. İlk web bileşeninin benimsenmesi DOM sayfasına gizli bir alan ekleyecek veya değeri güncellemek için FormData arabirimini kullanacaktır. Hiçbir şey çok pratik değildir ve web bileşeni kapsüllemesine zarar verir. Internals Elementals’ın yeni arayüzü, web bileşenlerinin özel değerlerin ve geçerliliğin belirlenebilmesi için forma bağlanmasına izin verir. Bu kromda uygulanır, ancak Polyilfill diğer tarayıcılar için mevcuttur. Göstermek için </ rep'e giriş bileşenini yaparsınız. Sınıfın, true olarak ayarlanmış statik formsokasyonlu bir değeri olmalı ve isteğe bağlı olarak, dış form ilişkilendirildiğinde formassociatedCallback () yöntemi çağrılabilir: // web bileşen sınıfı sınıf girişi htmlElement = true genişletir ; formAssociatedCallback (form) {console.log (‘form ilişkili:’, form.id); } Yapıcı şimdi, bileşenlerin değeri veya doğrulamayı kontrol etmek isteyen diğer JavaScript formları ve kodlarla iletişim kurmasına izin veren ekleme yöntemini () çalıştırmalıdır: yapıcı () {Super (); this. internals = this. atteboiner (); this.setValue (”); } // SetValue (V) değerini ayarlayın {this.value = v; this. internals.setFormValue (v);
} SetFormValue Method () Dahili öğe Boş bir dize ile başlatılan ana formun öğe değerini ayarlayın (bu da birkaç ad/değer çiftiyle formdata nesnesine devam edilebilir). Özellik ve diğer yöntemler: Form: Ebeveyn şekli
Etiketler: Bileşenleri etiketleyen dizi öğeleri
Sınırlama Doğrulama WillValidate, CheckValidite ve WruthationMessage gibi yangın seçenekleri
ConnectedCallback () yöntemi Shadow Dom’u eskisi gibi yapar, ancak değişim alanı da izlemelidir, böylece setFormValue () çalıştırılabilir: connectCallback () {const Shadow = this.attachshadow ({mode: ‘kapalı’}); Shadow.innerhtml = ` giriş {genişlik: 4em; } `; // Giriş değerlerini izleyin Shadow.querySector (‘giriş’). addeventListener (‘giriş’, e => {this.setValue (e.target.value);}); } Artık diğer alanlara benzer bir şekilde hareket eden bu web bileşenini kullanarak bir HTML formu oluşturabilirsiniz: gönder

admin

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir