javascript / expert
Snippet
Synchronisation externer Stores mit useSyncExternalStore
useSyncExternalStore ist der empfohlene Weg, um externe Datenquellen zu abonnieren. Es verhindert 'Tearing' im Concurrent-Modus, indem es die Konsistenz der UI zum Store sicherstellt.
snippet.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import { useSyncExternalStore } from 'react';const store = {value: 0,listeners: new Set<() => void>(),subscribe(callback: () => void) {this.listeners.add(callback);return () => this.listeners.delete(callback);},getSnapshot() {return this.value;},increment() {this.value++;this.listeners.forEach(l => l());}};function ExternalCounter() {const value = useSyncExternalStore(store.subscribe, store.getSnapshot);return <button onClick={() => store.increment()}>{value}</button>;}
react
Erklärung
1
useSyncExternalStore(store.subscribe, store.getSnapshot)
Klinkt sich in den Abo-Mechanismus des Stores ein und ruft den aktuellen Wert ab.
2
getSnapshot() { return this.value; }
Gibt den aktuellen Zustand des Stores zurück; muss bei unverändertem Store denselben Wert liefern.