# Skratky stavu: INC, TOGGLE, NUL, UPDATE, UNWATCH, WAIT, BLOCKED a CACHEPATH

> Malé funkcie, ktoré menia alebo sledujú hodnotu stavu podľa jej cesty, čakajú, kým hodnota existuje, spustia niečo iba raz za obdobie a uchovávajú hodnotu stavu v cache.

Framework: jcomponent20
Product: jComponent 20 (jcomponent@20)
Language: sk
Content-SHA256: c515c0ca16a3ff370ee065d9a53a5220e36144b796840867ce6134b1e600ac38
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: jcomponent20@3fedd009a277f50fddc608b97afbec553b67c51b
Review: not-recorded

Tieto funkcie pracujú so stavom jComponent podľa **cesty** (`'user.visits'`), ako `SET()` a `GET()`, a každá z nich upozorní komponenty a sledovače cesty.

- `INC(path, [value])` pripočíta `value` (predvolene `1`) k číslu; keď je hodnota prázdna, začne od `0`, a keď je to text, najprv sa prečíta ako číslo.
- `TOGGLE(path)` zmení boolean (prázdna hodnota sa stane `true`). `NUL(path)` a jeho alias `NULL(path)` nastavia hodnotu na `null`.
- `UPDATE(path)` (alias `UPD`) upozorní všetkých, ktorí cestu používajú, **bez zmeny hodnoty**: použite ho po úprave objektu alebo poľa na mieste.
- `UNWATCH(path, [fn])` odstráni sledovače cesty vytvorené cez `WATCH()`; s `fn` iba ten jeden.
- `WAIT(fn or path, callback)` spustí `callback`, hneď ako funkcia vráti niečo pravdivé, alebo cesta má hodnotu. Skontroluje hneď a potom **každých 500 ms**.
- `BLOCKED(key, timeout, [callback])` vráti `false` prvýkrát a `true` počas ďalších `timeout` ms (funguje aj `'5 seconds'`): je to ochrana pred dvojitým kliknutím alebo opakovanou požiadavkou. `callback` sa spustí iba vtedy, keď nie je zablokované.
- `CACHEPATH(path, expire, [default])` uchováva hodnotu stavu v cache (`CACHE()`): nastaví cestu na uloženú hodnotu, ak existuje (alebo na `default`, ktorý môže byť funkcia), a každú zmenu ukladá pod kľúč `path_<path>`.
- Cesta je cesta v stave stránky, takže názov ako `name` alebo `location` je vlastnosť `window`: používajte vlastné názvy (`person`, `prefs.mode`).
- `setTimeout2(id, fn, ms, [limit], [param])` je `setTimeout()` s debounce: opätovné zavolanie s rovnakým `id` reštartuje časovač, takže `fn` sa spustí raz, `ms` po poslednom volaní. S `limit` sa časovač reštartuje najviac toľkokrát a ďalšie volania sa ignorujú, kým `fn` nebeží, takže prúd volaní ho nemôže odkladať donekonečna. `clearTimeout2(id)` ho zruší a vráti `true`, keď nejaký bol.
- `CLONE(value)` vytvorí hlbokú kópiu (dátumy zostanú dátumami), `COPY(from, to)` hlboko skopíruje vlastnosti jedného objektu do druhého a vráti `to`. `NOOP` je funkcia, ktorá nerobí nič, a `WARN(...)` píše do `console.warn`.

```html public/index.html
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8" />
	<title>jComponent</title>
	<link rel="stylesheet" href="//cdn.componentator.com/spa.min@20.css" />
	<script src="//cdn.componentator.com/spa.min@20.js"></script>
</head>
<body>
	<p class="out"></p>
	<script>

		window.sample = { watched: 0 };

	</script>
</body>
</html>
```
