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

Kryžminė validacija, ciklas ir imitacija

11 pamokoje kiekvienas laukas buvo tikrinamas atskirai. Realios formos sudėtingesnės: taisyklės priklauso viena nuo kitos, patikros trunka laiko, o pateikimas turi savo „gyvenimo ciklą".

Kryžminė validacija (cross-field). Vienos taisyklės priklauso nuo kito lauko reikšmės. Kontaktų formoje: pasirinkus „Bug report", žinutės minimumas pakyla nuo 20 iki 50 simbolių — reikalaujam daugiau detalių. Tai įmanoma, nes rules(values) gauna visas reikšmes:

if (values.subject === 'bug') {
  base.message = [required('Message'), minLength(50, 'A bug report'), maxLength(1000)];
}

Pateikimo ciklas. Kai submit eina į tinklą (tikrą ar imituotą), mygtukas negali tiesiog „stovėti":

disabled + „Sending…"  →  sėkmė (success panelė)  arba  klaida (toast)  →  atstatom mygtuką

try/catch/finally idealiai tinka: try — siųsti, catch — klaida, finally — visada atstatyti mygtuką.

Asinchroninė validacija. „Ar vardas užimtas?" — negalima atsakyti vietoje; reikia paklausti serverio. Registracijoje tai daroma per blur (o realiai — debounce'inta užklausa į /api/username-available).

Ir sąžininga pastaba — svarbi pati savaime. Ši programa neturi backend'o. Submit'as imituojamas (fakeSend, fakeRegister). Bet visa kita — validacija, įkėlimo būsena, klaidų apdorojimas — tiksliai tokia, kokią rašytum tikram endpoint'ui. Pasikeistų tik fakeSend() — vietoj setTimeout būtų fetch. Sakau tai atvirai, nes svarbu suprasti: mokaisi tikrą modelį, ne žaislą.

Ir dar: slaptažodis niekada nesaugomas. Jokiame localStorage. Slaptažodžiai gyvena serveryje, sumaišyti (hashed) — niekada naršyklėje.