SlideShare a Scribd company logo
1 of 26
Download to read offline
Libreria per la creazione di web components
ELEONORA ROCCHI


- 2022 -
La creazione di un componente Lit implica una serie di concetti:


➡ Viene implementato come elemento personalizzato e registrato nel
browser.


➡ Ha un metodo render chiamato per eseguire il rendering del contenuto del
componente, nel quale si de
f
inisce un template.


➡ Le proprietà mantengono lo stato del componente. La modi
f
ica di una o
più proprietà reattive dei componenti, attiva un ciclo di aggiornamento
che si occupa di ri-eseguire il rendering del componente.


➡ Un componente può de
f
inire stili incapsulati per controllare il proprio
aspetto.


➡ Lit de
f
inisce una serie di callback di cui è possibile eseguire l'override per
agganciarsi al ciclo di vita del componente, ad esempio per eseguire
codice quando l'elemento viene aggiunto a una pagina o ogni volta che il
componente viene aggiornato.
ER 2022
Come si de
f
inisce un
componente Lit
ER 2022
Va creata una classe che estende LitElement e va registrata nel browser:


ER 2022
Il decoratore @customElement è un'abbreviazione per chiamare
customElements.de
f
ine, che registra una classe di elementi personalizzati con
il browser e la associa a un nome di elemento (in questo caso, simple-greeting).


Usando JavaScript, o senza usare decoratori, si può chiamare de
f
ine()
direttamente:
ER 2022
Un componente Lit è un
elemento HTML


ER 2022
Quando si de
f
inisce un componente Lit,


si sta de
f
inendo un elemento HTML personalizzato


che si può poi usare come un qualsiasi elemento integrato:


ER 2022
La classe base LitElement è una sottoclasse di HTMLElement,


quindi un componente Lit eredita tutte le proprietà dei metodi standard


di HTMLElement.


In particolare, LitElement eredita da ReactiveElement,


che implementa proprietà reattive, e a sua volta eredita da HTMLElement.
ER 2022
Sappiamo che TypeScript è in grado di dedurre la classe di un elemento
HTML restituito da alcune API DOM in base al nome del tag.


Ad esempio, document.createElement('img') restituisce un'istanza
HTMLImageElement con una proprietà src: string.


ER 2022
Si può ottenere lo stesso comportamento sugli elementi personalizzati
aggiungendo a HTMLElementTagNameMap come segue:


ER 2022
In questo modo, il codice seguente esegue correttamente i controlli di tipo:


ER 2022
Conviene sempre aggiungere una voce HTMLElementTagNameMap agli
elementi creati in TypeScript e pubblicare i tipi di .d.ts nel pacchetto npm.


ER 2022
Cosa fa il Render
ER 2022
È possibile aggiungere un template al componente per de
f
inire cosa
dovrebbe essere visualizzato.


I template possono includere espressioni, che sono placeholder per del
contenuto dinamico.


Per de
f
inire un template per un componente Lit, va aggiunto un metodo
render():


ER 2022
Si scrive il template in HTML all'interno di un Javascript tagged template literal usando la
funzione tag html di Lit.


I template literal sono un tipo speciale di simboli di stringa che possono contenere
espressioni Javascript e si estendono su più righe. Usano i caratteri backtick invece delle
doppie virgolette. Accetta all’interno anche espressioni arbitrarie.


Questi template possono essere utilizzati anche come funzioni, mettendo una parola chiave
davanti alla stringa del template per “taggarla".


ER 2022
I template Lit possono includere espressioni JavaScript.


È possibile utilizzare le espressioni per impostare contenuto di testo, attributi,
proprietà e listener di eventi.


Il metodo render() può anche includere qualsiasi JavaScript, ad esempio è
possibile creare variabili locali da utilizzare nelle espressioni.


In genere, il metodo render() del componente restituisce un singolo oggetto
TemplateResult (lo stesso tipo restituito dalla funzione tag html).


Tuttavia, può restituire tutto ciò che Lit può renderizzare:


- Valori primitivi come stringa, numeri o booleani.


- Oggetti TemplateResult creati dalla funzione html.


- Nodi DOM.


- Matrici o iterabili di uno qualsiasi dei tipi supportati.
ER 2022
Per sfruttare al meglio il modello di rendering funzionale di Lit, il metodo
render() dovrebbe:


➡ Evitare di modi
f
icare lo stato del componente.


➡ Evitare di produrre e
ff
etti collaterali.


➡ Utilizzare solo le proprietà del componente come input.


➡ Restituire lo stesso risultato quando vengono assegnati gli stessi valori
di proprietà.


➡ Evitare di e
ff
ettuare aggiornamenti DOM al di fuori di render().


➡ Esprimere il modello del componente in funzione del suo stato e
acquisire il suo stato nelle proprietà.
ER 2022
Si possono comporre template Lit da
altri template.


Ad esempio, si può comporre un
template per un componente
chiamato <my-page> da template più
piccoli per l'intestazione, il piè di
pagina e il contenuto principale della
pagina.
ER 2022
In questo esempio, i singoli template
sono de
f
initi come metodi di istanza,
quindi una sottoclasse potrebbe
estendere questo componente e
sovrascrivere uno o più template.


Si può anche comporre un template
importando altri elementi e
utilizzandoli nel template stesso.


ER 2022
ER 2022
Un componente Lit esegue il rendering del suo modello inizialmente quando viene
aggiunto al DOM su una pagina.


Dopo il rendering iniziale, qualsiasi modi
f
ica alle proprietà reattive del componente
attiva un ciclo di aggiornamento, ri-eseguendo il rendering del componente.


Lit aggiorna in batch per massimizzare le prestazioni e l'e
ff
icienza.


L'impostazione di più proprietà contemporaneamente attiva un solo
aggiornamento, eseguito in modo asincrono al momento del microtask.


Durante un aggiornamento, solo le parti del DOM che cambiano vengono
renderizzate nuovamente.


Sebbene i modelli Lit assomiglino all'interpolazione di stringhe, Lit analizza e crea
HTML statico una volta, quindi aggiorna solo i valori modi
f
icati nelle espressioni,
rendendo gli aggiornamenti molto e
ff
icienti.
ER 2022
Lit usa il shadow DOM per incapsulare il DOM che un componente esegue il
rendering.


Lo shadow DOM consente a un elemento di creare il proprio albero DOM
isolato, separato dall'albero del documento principale.


È una caratteristica fondamentale delle speci
f
iche dei web component che
consente l'interoperabilità, l'incapsulamento dello stile e altri vantaggi.
ER 2022
Cos’è lo shadow DOM
ER 2022
Lo shadow DOM consente agli sviluppatori Web di creare DOM e CSS
compartimentalizzati per i web component.


Lo shadow DOM rimuove alcune fragilità tipiche della creazione di app Web, che
derivano dalla natura globale di HTML, CSS e JS.


Ad esempio, quando si utilizza un nuovo ID/classe HTML, non è possibile stabilire se
entrerà in con
f
litto con un nome esistente utilizzato dalla pagina.


Nel CSS si moltiplicano gli !important, i selettori di stile crescono fuori controllo e le
prestazioni possono risentirne.


Lo shadow DOM corregge CSS e DOM, introducendo gli scoped style.


Senza strumenti o convenzioni di denominazione, si possono raggruppare CSS con
markup, nascondere i dettagli di implementazione e creare componenti autonomi
in JavaScript vanilla.
ER 2022
Quando il browser carica una pagina web, tra le altre cose, trasforma l'HTML
in un documento live.


Per comprendere la struttura della pagina, il browser analizza l'HTML
(stringhe di testo statiche) in un modello di dati (oggetti/nodi).


Il browser preserva la gerarchia dell'HTML creando un albero di questi nodi:
il DOM, che è una rappresentazione dal vivo di una pagina. A di
ff
erenza
dell'HTML statico, i nodi prodotti dal browser contengono proprietà, metodi
e possono essere manipolati da programmi utilizzando JavaScript.
ER 2022
Lo Shadow DOM è semplicemente un normale DOM con due di
ff
erenze:


1. come viene creato/utilizzato


2. come si comporta rispetto al resto della pagina.


Normalmente, si creano nodi DOM e si aggiungono come
f
igli di un altro
elemento.


Con Shadow DOM, si crea un albero DOM con ambito che è collegato
all'elemento, ma separato dai suoi
f
igli e
ff
ettivi. Questo sottoalbero con
ambito è chiamato albero ombra. L'elemento a cui è collegato è il suo
shadow host. Tutto ciò che si aggiunge nelle shadow diventa locale per
l'elemento di hosting, incluso <style>.


Questo è il modo in cui lo shadow DOM ottiene il css style scope.
ER 2022

More Related Content

Similar to LIT_2.pdf

Hands on MVC - Mastering the Web
Hands on MVC - Mastering the WebHands on MVC - Mastering the Web
Hands on MVC - Mastering the WebClaudio Gandelli
 
Html e Css - 1 | WebMaster & WebDesigner
Html e Css - 1 | WebMaster & WebDesigner Html e Css - 1 | WebMaster & WebDesigner
Html e Css - 1 | WebMaster & WebDesigner Matteo Magni
 
Migliora il tuo codice con knockout.js
Migliora il tuo codice con knockout.jsMigliora il tuo codice con knockout.js
Migliora il tuo codice con knockout.jsAndrea Dottor
 
Presentazione Corso - Parte 1
Presentazione Corso - Parte 1Presentazione Corso - Parte 1
Presentazione Corso - Parte 1Giorgio Carpoca
 
Meetup ASP.NET Core Angular
Meetup ASP.NET Core AngularMeetup ASP.NET Core Angular
Meetup ASP.NET Core Angulardotnetcode
 
Non solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
Non solo Django: MVC orientato agli oggetti con Plone e Zope ToolkitNon solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
Non solo Django: MVC orientato agli oggetti con Plone e Zope ToolkitMaurizio Delmonte
 
DNM19 Sessione1 Orchard Primo Impatto (ita)
DNM19 Sessione1 Orchard Primo Impatto (ita)DNM19 Sessione1 Orchard Primo Impatto (ita)
DNM19 Sessione1 Orchard Primo Impatto (ita)Alessandro Giorgetti
 
WordPress LD07
WordPress LD07WordPress LD07
WordPress LD07Giacomo
 
Giovambattista Fazioli, 10 more things
Giovambattista Fazioli, 10 more thingsGiovambattista Fazioli, 10 more things
Giovambattista Fazioli, 10 more thingsKnowCamp
 
Html e Css - 1 | WebMaster & WebDesigner
Html e Css - 1 | WebMaster & WebDesignerHtml e Css - 1 | WebMaster & WebDesigner
Html e Css - 1 | WebMaster & WebDesignerMatteo Magni
 
Joomla! 1.5: CMS a mani tese verso gli sviluppatori
Joomla! 1.5: CMS a mani tese verso gli sviluppatoriJoomla! 1.5: CMS a mani tese verso gli sviluppatori
Joomla! 1.5: CMS a mani tese verso gli sviluppatoriGrUSP
 
Joomla! 1.5: CMS a mani tese verso gli sviluppatori
Joomla! 1.5: CMS a mani tese verso gli sviluppatoriJoomla! 1.5: CMS a mani tese verso gli sviluppatori
Joomla! 1.5: CMS a mani tese verso gli sviluppatoriAlessandro Nadalin
 
Dal RenderFragment ai Generics, tips for Blazor developers
Dal RenderFragment ai Generics, tips for Blazor developersDal RenderFragment ai Generics, tips for Blazor developers
Dal RenderFragment ai Generics, tips for Blazor developersAndrea Dottor
 
Guida introduttiva al codice HTML
Guida introduttiva al codice HTMLGuida introduttiva al codice HTML
Guida introduttiva al codice HTMLEnrico Mainero
 
•Blog: quali tecnologie per il futuro?
•Blog: quali tecnologie per il futuro?•Blog: quali tecnologie per il futuro?
•Blog: quali tecnologie per il futuro?IWA
 

Similar to LIT_2.pdf (20)

react-it.pdf
react-it.pdfreact-it.pdf
react-it.pdf
 
Hands on MVC - Mastering the Web
Hands on MVC - Mastering the WebHands on MVC - Mastering the Web
Hands on MVC - Mastering the Web
 
Html e Css - 1 | WebMaster & WebDesigner
Html e Css - 1 | WebMaster & WebDesigner Html e Css - 1 | WebMaster & WebDesigner
Html e Css - 1 | WebMaster & WebDesigner
 
Migliora il tuo codice con knockout.js
Migliora il tuo codice con knockout.jsMigliora il tuo codice con knockout.js
Migliora il tuo codice con knockout.js
 
Presentazione Corso - Parte 1
Presentazione Corso - Parte 1Presentazione Corso - Parte 1
Presentazione Corso - Parte 1
 
Meetup ASP.NET Core Angular
Meetup ASP.NET Core AngularMeetup ASP.NET Core Angular
Meetup ASP.NET Core Angular
 
Non solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
Non solo Django: MVC orientato agli oggetti con Plone e Zope ToolkitNon solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
Non solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
 
DNM19 Sessione1 Orchard Primo Impatto (ita)
DNM19 Sessione1 Orchard Primo Impatto (ita)DNM19 Sessione1 Orchard Primo Impatto (ita)
DNM19 Sessione1 Orchard Primo Impatto (ita)
 
DDive11 - xpages
DDive11 - xpagesDDive11 - xpages
DDive11 - xpages
 
WordPress LD07
WordPress LD07WordPress LD07
WordPress LD07
 
Giovambattista Fazioli, 10 more things
Giovambattista Fazioli, 10 more thingsGiovambattista Fazioli, 10 more things
Giovambattista Fazioli, 10 more things
 
Html e Css - 1 | WebMaster & WebDesigner
Html e Css - 1 | WebMaster & WebDesignerHtml e Css - 1 | WebMaster & WebDesigner
Html e Css - 1 | WebMaster & WebDesigner
 
Joomla! 1.5: CMS a mani tese verso gli sviluppatori
Joomla! 1.5: CMS a mani tese verso gli sviluppatoriJoomla! 1.5: CMS a mani tese verso gli sviluppatori
Joomla! 1.5: CMS a mani tese verso gli sviluppatori
 
Joomla! 1.5: CMS a mani tese verso gli sviluppatori
Joomla! 1.5: CMS a mani tese verso gli sviluppatoriJoomla! 1.5: CMS a mani tese verso gli sviluppatori
Joomla! 1.5: CMS a mani tese verso gli sviluppatori
 
Dojo nuovo look alle vostre applicazioni web Domino
Dojo nuovo look alle vostre applicazioni web DominoDojo nuovo look alle vostre applicazioni web Domino
Dojo nuovo look alle vostre applicazioni web Domino
 
Dal RenderFragment ai Generics, tips for Blazor developers
Dal RenderFragment ai Generics, tips for Blazor developersDal RenderFragment ai Generics, tips for Blazor developers
Dal RenderFragment ai Generics, tips for Blazor developers
 
Guida introduttiva al codice HTML
Guida introduttiva al codice HTMLGuida introduttiva al codice HTML
Guida introduttiva al codice HTML
 
•Blog: quali tecnologie per il futuro?
•Blog: quali tecnologie per il futuro?•Blog: quali tecnologie per il futuro?
•Blog: quali tecnologie per il futuro?
 
Ddive Xpage852
Ddive Xpage852Ddive Xpage852
Ddive Xpage852
 
Novità di Asp.Net 4.0
Novità di Asp.Net 4.0Novità di Asp.Net 4.0
Novità di Asp.Net 4.0
 

LIT_2.pdf

  • 1. Libreria per la creazione di web components ELEONORA ROCCHI - 2022 -
  • 2. La creazione di un componente Lit implica una serie di concetti: ➡ Viene implementato come elemento personalizzato e registrato nel browser. ➡ Ha un metodo render chiamato per eseguire il rendering del contenuto del componente, nel quale si de f inisce un template. ➡ Le proprietà mantengono lo stato del componente. La modi f ica di una o più proprietà reattive dei componenti, attiva un ciclo di aggiornamento che si occupa di ri-eseguire il rendering del componente. ➡ Un componente può de f inire stili incapsulati per controllare il proprio aspetto. ➡ Lit de f inisce una serie di callback di cui è possibile eseguire l'override per agganciarsi al ciclo di vita del componente, ad esempio per eseguire codice quando l'elemento viene aggiunto a una pagina o ogni volta che il componente viene aggiornato. ER 2022
  • 3. Come si de f inisce un componente Lit ER 2022
  • 4. Va creata una classe che estende LitElement e va registrata nel browser: ER 2022
  • 5. Il decoratore @customElement è un'abbreviazione per chiamare customElements.de f ine, che registra una classe di elementi personalizzati con il browser e la associa a un nome di elemento (in questo caso, simple-greeting). Usando JavaScript, o senza usare decoratori, si può chiamare de f ine() direttamente: ER 2022
  • 6. Un componente Lit è un elemento HTML ER 2022
  • 7. Quando si de f inisce un componente Lit, si sta de f inendo un elemento HTML personalizzato che si può poi usare come un qualsiasi elemento integrato: ER 2022
  • 8. La classe base LitElement è una sottoclasse di HTMLElement, quindi un componente Lit eredita tutte le proprietà dei metodi standard di HTMLElement. In particolare, LitElement eredita da ReactiveElement, che implementa proprietà reattive, e a sua volta eredita da HTMLElement. ER 2022
  • 9. Sappiamo che TypeScript è in grado di dedurre la classe di un elemento HTML restituito da alcune API DOM in base al nome del tag. Ad esempio, document.createElement('img') restituisce un'istanza HTMLImageElement con una proprietà src: string. ER 2022
  • 10. Si può ottenere lo stesso comportamento sugli elementi personalizzati aggiungendo a HTMLElementTagNameMap come segue: ER 2022
  • 11. In questo modo, il codice seguente esegue correttamente i controlli di tipo: ER 2022
  • 12. Conviene sempre aggiungere una voce HTMLElementTagNameMap agli elementi creati in TypeScript e pubblicare i tipi di .d.ts nel pacchetto npm. ER 2022
  • 13. Cosa fa il Render ER 2022
  • 14. È possibile aggiungere un template al componente per de f inire cosa dovrebbe essere visualizzato. I template possono includere espressioni, che sono placeholder per del contenuto dinamico. Per de f inire un template per un componente Lit, va aggiunto un metodo render(): ER 2022
  • 15. Si scrive il template in HTML all'interno di un Javascript tagged template literal usando la funzione tag html di Lit. I template literal sono un tipo speciale di simboli di stringa che possono contenere espressioni Javascript e si estendono su più righe. Usano i caratteri backtick invece delle doppie virgolette. Accetta all’interno anche espressioni arbitrarie. Questi template possono essere utilizzati anche come funzioni, mettendo una parola chiave davanti alla stringa del template per “taggarla". ER 2022
  • 16. I template Lit possono includere espressioni JavaScript. È possibile utilizzare le espressioni per impostare contenuto di testo, attributi, proprietà e listener di eventi. Il metodo render() può anche includere qualsiasi JavaScript, ad esempio è possibile creare variabili locali da utilizzare nelle espressioni. In genere, il metodo render() del componente restituisce un singolo oggetto TemplateResult (lo stesso tipo restituito dalla funzione tag html). Tuttavia, può restituire tutto ciò che Lit può renderizzare: - Valori primitivi come stringa, numeri o booleani. - Oggetti TemplateResult creati dalla funzione html. - Nodi DOM. - Matrici o iterabili di uno qualsiasi dei tipi supportati. ER 2022
  • 17. Per sfruttare al meglio il modello di rendering funzionale di Lit, il metodo render() dovrebbe: ➡ Evitare di modi f icare lo stato del componente. ➡ Evitare di produrre e ff etti collaterali. ➡ Utilizzare solo le proprietà del componente come input. ➡ Restituire lo stesso risultato quando vengono assegnati gli stessi valori di proprietà. ➡ Evitare di e ff ettuare aggiornamenti DOM al di fuori di render(). ➡ Esprimere il modello del componente in funzione del suo stato e acquisire il suo stato nelle proprietà. ER 2022
  • 18. Si possono comporre template Lit da altri template. Ad esempio, si può comporre un template per un componente chiamato <my-page> da template più piccoli per l'intestazione, il piè di pagina e il contenuto principale della pagina. ER 2022
  • 19. In questo esempio, i singoli template sono de f initi come metodi di istanza, quindi una sottoclasse potrebbe estendere questo componente e sovrascrivere uno o più template. Si può anche comporre un template importando altri elementi e utilizzandoli nel template stesso. ER 2022
  • 21. Un componente Lit esegue il rendering del suo modello inizialmente quando viene aggiunto al DOM su una pagina. Dopo il rendering iniziale, qualsiasi modi f ica alle proprietà reattive del componente attiva un ciclo di aggiornamento, ri-eseguendo il rendering del componente. Lit aggiorna in batch per massimizzare le prestazioni e l'e ff icienza. L'impostazione di più proprietà contemporaneamente attiva un solo aggiornamento, eseguito in modo asincrono al momento del microtask. Durante un aggiornamento, solo le parti del DOM che cambiano vengono renderizzate nuovamente. Sebbene i modelli Lit assomiglino all'interpolazione di stringhe, Lit analizza e crea HTML statico una volta, quindi aggiorna solo i valori modi f icati nelle espressioni, rendendo gli aggiornamenti molto e ff icienti. ER 2022
  • 22. Lit usa il shadow DOM per incapsulare il DOM che un componente esegue il rendering. Lo shadow DOM consente a un elemento di creare il proprio albero DOM isolato, separato dall'albero del documento principale. È una caratteristica fondamentale delle speci f iche dei web component che consente l'interoperabilità, l'incapsulamento dello stile e altri vantaggi. ER 2022
  • 23. Cos’è lo shadow DOM ER 2022
  • 24. Lo shadow DOM consente agli sviluppatori Web di creare DOM e CSS compartimentalizzati per i web component. Lo shadow DOM rimuove alcune fragilità tipiche della creazione di app Web, che derivano dalla natura globale di HTML, CSS e JS. Ad esempio, quando si utilizza un nuovo ID/classe HTML, non è possibile stabilire se entrerà in con f litto con un nome esistente utilizzato dalla pagina. Nel CSS si moltiplicano gli !important, i selettori di stile crescono fuori controllo e le prestazioni possono risentirne. Lo shadow DOM corregge CSS e DOM, introducendo gli scoped style. Senza strumenti o convenzioni di denominazione, si possono raggruppare CSS con markup, nascondere i dettagli di implementazione e creare componenti autonomi in JavaScript vanilla. ER 2022
  • 25. Quando il browser carica una pagina web, tra le altre cose, trasforma l'HTML in un documento live. Per comprendere la struttura della pagina, il browser analizza l'HTML (stringhe di testo statiche) in un modello di dati (oggetti/nodi). Il browser preserva la gerarchia dell'HTML creando un albero di questi nodi: il DOM, che è una rappresentazione dal vivo di una pagina. A di ff erenza dell'HTML statico, i nodi prodotti dal browser contengono proprietà, metodi e possono essere manipolati da programmi utilizzando JavaScript. ER 2022
  • 26. Lo Shadow DOM è semplicemente un normale DOM con due di ff erenze: 1. come viene creato/utilizzato 2. come si comporta rispetto al resto della pagina. Normalmente, si creano nodi DOM e si aggiungono come f igli di un altro elemento. Con Shadow DOM, si crea un albero DOM con ambito che è collegato all'elemento, ma separato dai suoi f igli e ff ettivi. Questo sottoalbero con ambito è chiamato albero ombra. L'elemento a cui è collegato è il suo shadow host. Tutto ciò che si aggiunge nelle shadow diventa locale per l'elemento di hosting, incluso <style>. Questo è il modo in cui lo shadow DOM ottiene il css style scope. ER 2022