# Zustands-Kurzbefehle: INC, TOGGLE, NUL, UPDATE, UNWATCH, WAIT, BLOCKED und CACHEPATH

> Kleine Funktionen, die einen Wert des Zustands über seinen Pfad ändern oder beobachten, warten, bis ein Wert existiert, etwas nur einmal pro Zeitraum ausführen und einen Wert des Zustands im Cache halten.

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

Diese Funktionen arbeiten über den **Pfad** (`'user.visits'`) mit dem Zustand von jComponent, wie `SET()` und `GET()`, und jede von ihnen benachrichtigt die Komponenten und die Beobachter des Pfads.

- `INC(path, [value])` addiert `value` (Standard `1`) zu einer Zahl; ist der Wert leer, beginnt sie bei `0`, und ein Text wird zuerst als Zahl gelesen.
- `TOGGLE(path)` ändert einen Boolean (ein leerer Wert wird `true`). `NUL(path)` und sein Alias `NULL(path)` setzen den Wert auf `null`.
- `UPDATE(path)` (Alias `UPD`) benachrichtigt alle, die den Pfad verwenden, **ohne den Wert zu ändern**: Nutze es, nachdem du ein Objekt oder Array an Ort und Stelle verändert hast.
- `UNWATCH(path, [fn])` entfernt die mit `WATCH()` erstellten Beobachter des Pfads; mit `fn` nur diesen einen.
- `WAIT(fn or path, callback)` führt `callback` aus, sobald die Funktion etwas Wahres zurückgibt oder der Pfad einen Wert hat. Es prüft sofort und danach **alle 500 ms**.
- `BLOCKED(key, timeout, [callback])` gibt beim ersten Mal `false` zurück und für die nächsten `timeout` ms `true` (auch `'5 seconds'` funktioniert): Es ist ein Schutz gegen einen Doppelklick oder eine wiederholte Anfrage. Der `callback` läuft nur, wenn nicht blockiert ist.
- `CACHEPATH(path, expire, [default])` hält einen Wert des Zustands im Cache (`CACHE()`): Es setzt den Pfad auf den gecachten Wert, falls vorhanden (oder auf `default`, das eine Funktion sein kann), und speichert jede Änderung unter dem Schlüssel `path_<path>`.
- Ein Pfad ist ein Pfad im Zustand der Seite, daher ist ein Name wie `name` oder `location` eine Eigenschaft von `window`: Verwende eigene Namen (`person`, `prefs.mode`).
- `setTimeout2(id, fn, ms, [limit], [param])` ist ein entprelltes `setTimeout()`: Ein erneuter Aufruf mit derselben `id` startet den Timer neu, sodass `fn` einmal läuft, `ms` nach dem letzten Aufruf. Mit `limit` wird der Timer höchstens so oft neu gestartet, und die folgenden Aufrufe werden ignoriert, bis `fn` gelaufen ist, sodass ein Strom von Aufrufen ihn nicht ewig verschieben kann. `clearTimeout2(id)` bricht ihn ab und gibt `true` zurück, wenn es einen gab.
- `CLONE(value)` erstellt eine tiefe Kopie (Daten bleiben Daten), `COPY(from, to)` kopiert die Eigenschaften eines Objekts tief in ein anderes und gibt `to` zurück. `NOOP` ist eine Funktion, die nichts tut, und `WARN(...)` schreibt in `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>
```
