Tema
/
Interneto svetainių kliento dalies kūrimas JS
📖 Teorija

Kai būsena išsibarsto

Ši pamoka — kurso lūžis. Iki šiol viskas augo sklandžiai. Dabar pamatysim, kur veda „paprastas" būdas valdyti būseną — ir kodėl to skausmo reikia.

Pažiūrėk, kaip kaupėsi būsena. 6 pamokoje atsirado isLoading ir error. 7-oje — searchQuery. Pridėk kolekcijos (10 pamoka) collectionQuery, sortKey, currentPage, pageSize, plius pictures, favorites, daysToShow — ir turi apie dešimt laisvų kintamųjų, išbarstytų po main.js. Tai — visa programos atmintis, be jokio šeimininko.

Ir čia — problema. Trys vaizdai priklauso nuo tų pačių favorites:

  • Galerija — ar kortelės ♡ užpildytas.
  • Kolekcija — ar yra tos nuotraukos eilutė.
  • Pradžios ekranas — „išsaugota" skaitiklis.

Kai favorites pasikeičia (paspaudi ♡), visi trys turi persipiešti. O kas juos perpiešia? Tu, ranka — kiekvienas veiksmas turi iškviesti renderGallery() IR renderCollection() IR renderHome().

Kol veiksmų mažai, atrodo valdoma. Bet kiekvienas naujas veiksmas privalo žinoti visus vaizdus, priklausančius nuo jo liečiamų duomenų. Ir niekas — nei kompiliatorius, nei naršyklė — neįspės, jei vieną pamirši. DOM ir duomenys ima skirtis, o juos kartu laiko tik tavo atmintis. Atmintis sugenda.

Šioje pamokoje tą klaidą atkursim ir pamatysim — tyliai meluojantį ekraną. Nes būtent šitą 9 pamokoje išspręs pub/sub, ir būtent dėl šito vėliau TypeScript arka „suveikia". Jei ši pamoka neskauda — viskas po jos nublanksta.