javascript / expert
Snippet
Orchestrierung komplexer Steuerflüsse mit Generator-Funktionen in Custom React Hooks
ES6-Generatorfunktionen ermöglichen eine feingliedrige Zustandsautomaten-Orchestrierung in React-Komponenten. Indem Iterator-Instanzen in einem React useRef gehalten und Yield-Punkte schrittweise angesteuert werden, lassen sich mehrstufige asynchrone Workflows deterministisch steuern und isoliert testen.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import { useState, useCallback, useRef } from 'react';type StepGenerator = Generator<string, void, unknown>;export function useWorkflow(workflowFn: () => StepGenerator) {const generatorRef = useRef<StepGenerator | null>(null);const [currentStep, setCurrentStep] = useState<string | null>(null);const start = useCallback(() => {generatorRef.current = workflowFn();const first = generatorRef.current.next();setCurrentStep(first.done ? null : first.value);}, [workflowFn]);const advance = useCallback((payload?: unknown) => {if (!generatorRef.current) return;const res = generatorRef.current.next(payload);setCurrentStep(res.done ? null : res.value);}, []);return { currentStep, start, advance };}
react
Erklärung
1
type StepGenerator = Generator<string, void, unknown>;
Definiert den TypeScript-Typvertrag für State-Generatoren, die Schritte via yield zurückgeben.
2
generatorRef.current = workflowFn();
Speichert die Generator-Iterator-Instanz mittels useRef über Re-Renders hinweg, um Re-Initialisierungen zu vermeiden.
3
const res = generatorRef.current.next(payload);
Setzt die Ausführung des Workflows bis zum nächsten yield-Statement fort und injiziert optional ein Payload.