# Genvägar för tillstånd: INC, TOGGLE, NUL, UPDATE, UNWATCH, WAIT, BLOCKED och CACHEPATH

> Små funktioner som ändrar eller bevakar ett värde i tillståndet via dess sökväg, väntar tills ett värde finns, kör något bara en gång per period och håller ett värde i tillståndet i cachen.

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

De här funktionerna arbetar med jComponents tillstånd via **sökväg** (`'user.visits'`), som `SET()` och `GET()`, och var och en av dem meddelar komponenterna och bevakarna av sökvägen.

- `INC(path, [value])` lägger till `value` (standard `1`) till ett tal; när värdet är tomt börjar det från `0` och när det är en text läses den först som ett tal.
- `TOGGLE(path)` ändrar en boolean (ett tomt värde blir `true`). `NUL(path)` och dess alias `NULL(path)` sätter värdet till `null`.
- `UPDATE(path)` (alias `UPD`) meddelar alla som använder sökvägen **utan att ändra värdet**: använd det efter att du ändrat ett objekt eller en array på plats.
- `UNWATCH(path, [fn])` tar bort sökvägens bevakare som skapats med `WATCH()`; med `fn` bara den.
- `WAIT(fn or path, callback)` kör `callback` så fort funktionen returnerar något sant, eller sökvägen har ett värde. Den kontrollerar direkt och sedan **var 500:e ms**.
- `BLOCKED(key, timeout, [callback])` returnerar `false` första gången och `true` under de följande `timeout` ms (`'5 seconds'` fungerar också): det är ett skydd mot dubbelklick eller en upprepad förfrågan. `callback` körs bara när det inte är blockerat.
- `CACHEPATH(path, expire, [default])` håller ett värde i tillståndet i cachen (`CACHE()`): den sätter sökvägen till det cachade värdet när det finns ett (eller till `default`, som kan vara en funktion) och sparar varje ändring under nyckeln `path_<path>`.
- En sökväg är en sökväg i sidans tillstånd, så ett namn som `name` eller `location` är en egenskap hos `window`: använd egna namn (`person`, `prefs.mode`).
- `setTimeout2(id, fn, ms, [limit], [param])` är en debouncad `setTimeout()`: att anropa den igen med samma `id` startar om timern, så `fn` körs en gång, `ms` efter det sista anropet. Med `limit` startas timern om högst så många gånger och de följande anropen ignoreras tills `fn` har körts, så en ström av anrop kan inte skjuta upp den för evigt. `clearTimeout2(id)` avbryter den och returnerar `true` när det fanns en.
- `CLONE(value)` gör en djup kopia (datum förblir datum), `COPY(from, to)` kopierar egenskaperna från ett objekt till ett annat på djupet och returnerar `to`. `NOOP` är en funktion som inte gör något och `WARN(...)` skriver till `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>
```
