javascript / intermediate
Snippet
Vollständige Auswertung diskriminierter Unions in React useReducer
Kontrollierte Zustandsübergänge in React `useReducer`-Handlern profitieren von Switch-Case-Kontrollflüssen zum Abgleich diskriminierter Action-Typen. Ein vollständiger Auswertungsblock im `default`-Zweig stellt sicher, dass unbekannte Action-Typen sofort aussagekräftige Laufzeitfehler werfen, anstatt den Zustand unbemerkt zu beschädigen.
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
23
24
25
26
27
28
29
30
import { useReducer } from 'react';const initialState = { status: 'idle', count: 0, error: null };function counterStateReducer(state, action) {switch (action.type) {case 'INCREMENT':return { ...state, count: state.count + action.payload.step };case 'RESET':return initialState;case 'FAIL':return { ...state, status: 'error', error: action.payload.message };default: {const exhaustiveCheck = action.type;throw new Error(`Unhandled action type encountered: ${exhaustiveCheck}`);}}}export function StepperControl() {const [state, dispatch] = useReducer(counterStateReducer, initialState);return (<div><span>Count: {state.count}</span><button onClick={() => dispatch({ type: 'INCREMENT', payload: { step: 5 } })}>+5</button><button onClick={() => dispatch({ type: 'RESET' })}>Reset</button></div>);}
react
Erklärung
1
switch (action.type) {
Steuert den Kontrollfluss basierend auf dem diskriminierten Literal-String der übergebenen Action.
2
default: {
Fallback-Zweig, der betreten wird, wenn ein nicht behandelter Action-Typ übermittelt wurde.
3
throw new Error(`Unhandled action type encountered: ${exhaustiveCheck}`);
Stoppt die Ausführung sofort mit einem Fehler, der den nicht unterstützten Action-Typ benennt.