# Statussnelkoppelingen: INC, TOGGLE, NUL, UPDATE, UNWATCH, WAIT, BLOCKED en CACHEPATH

> Kleine functies die een waarde van de status via zijn pad wijzigen of in de gaten houden, wachten tot een waarde bestaat, iets maar één keer per periode uitvoeren en een waarde van de status in de cache bewaren.

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

Deze functies werken op de status van jComponent via een **pad** (`'user.visits'`), zoals `SET()` en `GET()`, en elk van hen meldt de componenten en de watchers van het pad.

- `INC(path, [value])` telt `value` (standaard `1`) op bij een getal; als de waarde leeg is begint het bij `0` en als het een tekst is wordt die eerst als getal gelezen.
- `TOGGLE(path)` wijzigt een boolean (een lege waarde wordt `true`). `NUL(path)` en zijn alias `NULL(path)` zetten de waarde op `null`.
- `UPDATE(path)` (alias `UPD`) meldt iedereen die het pad gebruikt **zonder de waarde te wijzigen**: gebruik het nadat je een object of array ter plekke hebt gewijzigd.
- `UNWATCH(path, [fn])` verwijdert de met `WATCH()` gemaakte watchers van het pad; met `fn` alleen die ene.
- `WAIT(fn or path, callback)` voert `callback` uit zodra de functie iets waars teruggeeft, of het pad een waarde heeft. Het controleert meteen en daarna **elke 500 ms**.
- `BLOCKED(key, timeout, [callback])` geeft de eerste keer `false` terug en daarna `true` gedurende `timeout` ms (`'5 seconds'` werkt ook): het is een bescherming tegen een dubbele klik of een herhaald verzoek. De `callback` draait alleen als het niet geblokkeerd is.
- `CACHEPATH(path, expire, [default])` bewaart een waarde van de status in de cache (`CACHE()`): het zet het pad op de gecachete waarde als die er is (of op `default`, dat een functie kan zijn) en slaat elke wijziging op onder de sleutel `path_<path>`.
- Een pad is een pad in de status van de pagina, dus een naam als `name` of `location` is een eigenschap van `window`: gebruik eigen namen (`person`, `prefs.mode`).
- `setTimeout2(id, fn, ms, [limit], [param])` is een gedebouncete `setTimeout()`: opnieuw aanroepen met dezelfde `id` herstart de timer, zodat `fn` één keer draait, `ms` na de laatste aanroep. Met `limit` wordt de timer hoogstens zo vaak herstart en worden de volgende aanroepen genegeerd tot `fn` heeft gedraaid, zodat een stroom aanroepen hem niet eindeloos kan uitstellen. `clearTimeout2(id)` annuleert hem en geeft `true` terug als er een was.
- `CLONE(value)` maakt een diepe kopie (datums blijven datums), `COPY(from, to)` kopieert de eigenschappen van het ene object diep naar het andere en geeft `to` terug. `NOOP` is een functie die niets doet en `WARN(...)` schrijft naar `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>
```
