javascript / expert
Snippet
Kapseln privater Svelte-Action-Zustände über WeakMap-Instanzregister
Das direkte Anhängen von Metadaten an DOM-Elemente in Svelte-Actions birgt das Risiko von Scope-Pollution und Speicherlecks. Die Verwendung einer modulweit isolierten WeakMap koppelt interne Action-Zustände strikt an DOM-Elementreferenzen und ermöglicht automatische Garbage-Collection bei Elemententfernung.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const actionInstances = new WeakMap();export function createIsolatedAction(config) {return function action(node) {const state = Object.preventExtensions({ id: Symbol(), node, active: true });actionInstances.set(node, state);return {destroy() {const inst = actionInstances.get(node);if (inst) inst.active = false;actionInstances.delete(node);}};};}
svelte
Erklärung
1
const actionInstances = new WeakMap();
Deklariert eine modulweite WeakMap mit DOM-Elementen als Schlüssel für private Zustände.
2
const state = Object.preventExtensions({ id: Symbol(), node, active: true });
Erstellt ein Zustandsobjekt, das nicht mit fremden Eigenschaften erweitert werden kann.
3
actionInstances.set(node, state);
Registriert den Elementknoten als schwachen Schlüssel zu seinem privaten Zustand.
4
actionInstances.delete(node);
Entfernt die Referenz explizit aus dem Weak-Register beim Zerstören der Svelte-Komponente.