En el mòdul anterior vas escriure diverses plantilles amb la funció html, però sempre amb contingut completament fix: el mateix títol, el mateix estat, la mateixa persona assignada a cada renderitzat. Ha arribat el moment d'entendre què és realment aquesta funció html i, sobretot, què passa per dins quan el seu contingut deixa de ser estàtic. Aquesta lliçó obre el mòdul 2 explicant el mecanisme intern del motor de plantilles de Lit: com s'analitza una plantilla, com s'actualitza el DOM quan canvien les dades, i per què aquest enfocament és molt més eficient que les alternatives clàssiques de manipular el DOM a mà o reconstruir-lo amb innerHTML.

Contingut

  1. html no és una plantilla de text: és una funció
  2. Tagged template literals: la base de html
  3. Com sap Lit quines parts són dinàmiques
  4. Actualitzar el DOM sense un Virtual DOM
  5. Per què això és diferent (i millor) que innerHTML
  6. Primera interpolació a <task-card>
  7. Important: això encara no és reactivitat completa

  1. html no és una plantilla de text: és una funció

Fins ara, cada vegada que has escrit alguna cosa com això:

render() {
  return html`
    <article>
      <h3>Preparar la demo del sprint</h3>
      <p>Estado: En curso</p>
    </article>
  `;
}

és fàcil pensar en html\...`com si fos simplement una cadena de text amb HTML a dins, alguna cosa semblant a escriure"

...

". Aquesta intuïció és raonable a primera vista, però és incorrecta i amaga precisament el mecanisme que fa que Lit sigui ràpid i pràctic d'utilitzar. html` és, en realitat, una funció de JavaScript, i el que se li passa entre els accents greus no és una cadena normal, sinó una cosa anomenada tagged template literal ("plantilla de literal etiquetada"), una característica que forma part del mateix estàndard de JavaScript des de fa anys, sense cap dependència de Lit.

Quan el motor de JavaScript troba html\

Hola

`, no concatena text i crida htmlamb el resultat. En lloc d'això, invoca la funcióhtmlamb informació estructurada sobre la plantilla: d'una banda, un array amb els trossos de text literal ("estàtics"), i de l'altra, els valors que s'han interpolat dins de${}` (si n'hi ha). Aquesta distinció —trossos fixos d'una banda, valors dinàmics de l'altra— és la peça central de tot el que fa especial el motor de plantilles de Lit.

  1. Tagged template literals: la base de html

Per entendre bé què fa html, és útil veure primer com funciona un tagged template literal amb una funció d'exemple, sense Lit pel mig:

function miEtiqueta(trozos, ...valores) {
  console.log(trozos);   // ["Hola ", ", tienes ", " tareas"]
  console.log(valores);  // ["Ana", 3]
}

const nombre = 'Ana';
const numeroDeTareas = 3;

miEtiqueta`Hola ${nombre}, tienes ${numeroDeTareas} tareas`;

En executar aquest codi, trozos rep un array amb els tres fragments de text que queden entre les interpolacions ("Hola ", ", tienes " i " tareas"), mentre que valores rep, en un array a part, els dos valors interpolats ("Ana" i 3). Aquesta separació és exactament el que fa possible que una funció etiquetada "sàpiga" quines parts de la plantilla són literals (mai canvien) i quines són expressions (poden canviar).

La funció html de Lit és, en essència, una funció etiquetada d'aquest mateix tipus, especialitzada a tractar el primer array com a HTML i el segon com a dades que cal inserir en punts concrets d'aquest HTML. La diferència respecte a l'exemple de miEtiqueta és que html no es limita a mostrar aquests valors per consola: construeix amb ells un objecte intern, anomenat TemplateResult, que descriu la plantilla de manera que Lit la pugui processar de manera eficient.

  1. Com sap Lit quines parts són dinàmiques

Aquí hi ha la clau de tot el mecanisme. Com que els trossos de text literal sempre arriben separats dels valors interpolats, Lit pot, la primera vegada que veu una plantilla concreta, analitzar únicament el seu "esquelet" fix (els trossos de text) i esbrinar exactament en quines posicions de l'HTML apareixeran valors dinàmics. Aquesta anàlisi es fa una única vegada per plantilla, no a cada renderitzat.

El procés, simplificat, és el següent:

  1. La primera vegada que Lit troba una determinada plantilla html\...`(identificada internament pels seus trossos de text fixos), construeix un element