HTML Academy · Lekcja

Definiowanie elementów za pomocą customElements.define

Rejestrowanie klasy niestandardowego elementu w przeglądarce

Lekcja 1 z 413 kroki

Definiowanie elementów za pomocą customElements.define to bezpłatna lekcja HTML Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej HTML Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs HTML Academy zawiera 4 lekcji w sumie.

Czym są niestandardowe elementy?

Niestandardowe elementy pozwalają tworzyć własne tagi HTML obsługiwane przez klasę JavaScript. Po zdefiniowaniu element <my-card> zachowuje się jak każdy wbudowany element: można zapisać go w HTML, wyszukiwać, stylizować, obsługiwać za pomocą skryptów i używać w niezmienionej postaci we frameworkach.

Wymóg użycia łącznika

Każda nazwa niestandardowego elementu musi zawierać co najmniej jeden łącznik — user-avatar, app-button, my-card. Łącznik odróżnia niestandardowe elementy od obecnych i przyszłych wbudowanych tagów HTML, a jego użycie jest wymagane przez specyfikację.

Definiowanie klasy

Niestandardowy element jest klasą rozszerzającą HTMLElement (lub wbudowaną klasę potomną). Klasa może deklarować konstruktor i metody cyklu życia. Publiczne właściwości i metody klasy stają się interfejsem skryptowym elementu.

class MyCard extends HTMLElement {
  constructor() {
    super();
    this.textContent = "Hello from MyCard";
  }
}

Rejestrowanie za pomocą define

customElements.define("my-card", MyCard) rejestruje klasę pod nazwą tagu. Po rejestracji każdy istniejący i przyszły element <my-card> w dokumencie zostaje uaktualniony do instancji tej klasy.

super() jest obowiązkowe

Konstruktor musi wywołać super() jako pierwszą instrukcję, zanim uzyska dostęp do this. Pominięcie super() powoduje błąd „Failed to construct 'HTMLElement'”. Należy traktować to jako standardową regułę konstruktora klasy JavaScript.

Bez odczytów DOM w konstruktorze

Konstruktor nie może odczytywać atrybutów ani elementów potomnych elementu — w chwili tworzenia mogą one nie być jeszcze sparsowane. Konfigurację korzystającą z DOM należy przenieść do connectedCallback, który jest wywoływany dopiero po umieszczeniu elementu w dokumencie.

Rejestracja jest trwała

Nazwę elementu można zarejestrować tylko raz na stronę. Ponowna definicja tej samej nazwy powoduje błąd NotSupportedError. Aby testować zmiany podczas tworzenia, należy ponownie załadować stronę; w produkcji każdy komponent należy rejestrować raz podczas uruchamiania.

Polyfilly

Niestandardowe elementy są dostępne we wszystkich nowoczesnych przeglądarkach. W bardzo starych przeglądarkach (w większości już nieużywanych) polyfill webcomponents.js zapewnia rozwiązanie awaryjne. W nowych projektach można korzystać z natywnej obsługi i całkowicie pominąć polyfill.

Wykrywanie stanu definicji

customElements.get("my-card") zwraca klasę, jeśli została zdefiniowana, a w przeciwnym razie undefined. customElements.whenDefined("my-card") zwraca obietnicę, która zostaje rozstrzygnięta po zarejestrowaniu elementu — jest to przydatne w kodzie, który musi zaczekać na definicje ładowane z opóźnieniem.

customElements.whenDefined("my-card").then((Class) => {
  console.log("MyCard is ready");
});

Używanie elementu

Po zdefiniowaniu elementu używaj go dokładnie tak jak wbudowanego tagu: zapisz go w HTML (<my-card></my-card>), utwórz za pomocą document.createElement("my-card") albo utwórz instancję za pomocą new MyCard() i wstaw ją do dokumentu. Wszystkie trzy ścieżki tworzą tę samą uaktualnioną instancję.

Konwencje nazewnictwa

Niestandardowe elementy należy poprzedzać nazwą projektu lub firmy (cd-card, app-modal), aby uniknąć kolizji z innymi bibliotekami na tej samej stronie. Ekosystem komponentów internetowych jest niezależny od bundlera — każdy element na stronie może zarejestrować dowolną nazwę, a pierwsza rejestracja ma pierwszeństwo.

Sprawdzenie wiedzy

Dlaczego każda nazwa niestandardowego elementu musi zawierać łącznik?

Podsumowanie

Niestandardowe elementy to klasy JavaScript rozszerzające HTMLElement, rejestrowane za pomocą customElements.define("name", Class), przy czym nazwa musi zawierać łącznik. Konstruktor musi najpierw wywołać super() i nie może odczytywać DOM; prace z DOM należy odroczyć do connectedCallback. Zdefiniowane elementy zachowują się wszędzie dokładnie tak jak wbudowane tagi.

Bezpłatny start

Ucz się HTML dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
40
Lekcje
159

Często zadawane pytania

Czy lekcja „Definiowanie elementów za pomocą customElements.define” jest bezpłatna?

Tak — pełny tekst „Definiowanie elementów za pomocą customElements.define” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu HTML Academy, przejdź na CoddyKit PRO. Kurs HTML Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Definiowanie elementów za pomocą customElements.define”?

Rejestrowanie klasy niestandardowego elementu w przeglądarce Ćwiczysz HTML Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć HTML Academy?

Nie wymagamy żadnego doświadczenia. HTML Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „Definiowanie elementów za pomocą customElements.define”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji HTML Academy?

Tak. Każda lekcja HTML Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Definiowanie elementów za pomocą customElements.define
  2. connectedCallback i disconnectedCallback
  3. Obserwowane atrybuty i attributeChangedCallback
  4. Rozszerzanie wbudowanych elementów
← Powrót do HTML Academy