Tema
/
Interneto svetainių kliento dalies kūrimas JS

Būsena rankomis — trys perpiešimai kaskart

Kodo stulpelyje — būsena, kokia ji yra dabar: dešimt laisvų kintamųjų main.js viršuje. Nėra modulio, kuris jiems „priklausytų"; jie tiesiog guli greta.

Ir toggleFavorite — veiksmas, kuris paspaudus ♡ keičia favorites. Atkreipk dėmesį į pabaigą:

function toggleFavorite(pic) {
  const i = favorites.findIndex(f => f.date === pic.date);
  if (i >= 0) favorites.splice(i, 1);
  else favorites.push({ ...pic, rating: 0, notes: '', tags: [] });

  renderGallery({ isLoading, error, pictures: visiblePictures() });   // ♡ užpildymas
  renderCollection();                                                 // eilutė
  renderHome();                                                       // skaitiklis
}

Pats duomenų pakeitimas — dvi eilutės. O tada — trys perpiešimai, po vieną kiekvienam vaizdui, kuris rodo favorites. Tai veikia. Bet pažiūrėk, ko iš tavęs reikalauja: kiekvieną kartą, keisdamas favorites, privalai atsiminti visus tris. Ir taip su kiekvienu veiksmu, kuris liečia favorites — o jų bus daugiau (įvertinimas, žymos, pašalinimas).

Tai — „teisinga, bet trapi" versija. Ji veikia tik todėl, kad kažkas prisiminė iškviesti visus tris. Niekas to neužtikrina.

Patarimas. Pastebėk, kaip render priklauso nuo daugybės laisvų kintamųjų (isLoading, error, visiblePictures(), kuris skaito searchQuery…). Kai būsena išbarstyta, net „paprastas" perpiešimas turi surinkti gabalus iš visur. Kitas žingsnis parodys, kas nutinka, kai vieną gabalą pamiršti.