Persistenz von React useReducer-State in sessionStorage
Bewahre den Zustand von React useReducer in sessionStorage bei Neu laden auf, wobei Serialisierungsfilter eingesetzt werden, damit die Benutzeroberfläche nach einem Refresh erhalten bleibt, ohne dass Geheimnisse in den Speicher gelangen.
Quellen: How to Persist React useReducer State with sessionStorage
Die Lösung
Dokumentieren Sie gemeinsam den erfolgreichen Ablauf sowie den Wiederherstellungsprozess. Versuche und die Handhabung von Fehlern gehören zum Produkt. Trennen Sie die Abrufrichtlinie von der Erstellungsrichtlinie. Verfälschte Dokumente können die Antworten beeinflussen, ohne die Modellgewichte zu ändern.
import { useCallback, useReducer, type Dispatch } from 'react'
import { useSessionStorage } from 'react-use'
type ReducerFn<State, Action> = (state: State, action: Action) => State
export default function useSessionStorageReducer<State, Action>(
key: string,
reducer: ReducerFn<State, Action>,
initialState: State
): [State, Dispatch<Action>] {
const [sessionStorageValue, setSessionStorageValue] = useSessionStorage(
`reducer:${key.replaceAll(/\s+/g, '_')}`,
initialState
)
const reducerLocalStorage = useCallback(
(state: State, action: Action) => {
const newState = reducer(state, action)
setSessionStorageValue(newState)
return newState
},
[reducer, setSessionStorageValue]
)
return useReducer(reducerLocalStorage, sessionStorageValue)
}
Wie es funktioniert
Trennen Sie die Abrufrichtlinie von der Erstellungsrichtlinie. Verfälschte Dokumente können die Antworten beeinflussen, ohne die Modellgewichte zu ändern.
Schnelles Beispiel für die Verwendung
Trennen Sie die Abrufrichtlinie von der Erstellungsrichtlinie. Verfälschte Dokumente können die Antworten beeinflussen, ohne die Modellgewichte zu ändern.
type State = { count: number }
type Action = { type: 'INCREMENT' } | { type: 'DECREMENT' }
function counterReducer(state: State, action: Action): State {
switch (action.type) {
case 'INCREMENT':
return { count: state.count + 1 }
case 'DECREMENT':
return { count: state.count - 1 }
default:
return state
}
}
export function Counter() {
const [state, dispatch] = useSessionStorageReducer('counter_key', counterReducer, { count: 0 })
return (
<div>
<p>Count: {state.count}</p>
<button onClick={() => dispatch({ type: 'INCREMENT' })}>+</button>
<button onClick={() => dispatch({ type: 'DECREMENT' })}>-</button>
</div>
)
}
Code herunterladen
Notieren Sie Zeiten und Kosten neben den funktionalen Ergebnissen. Frühe Sichtbarkeit verhindert überraschende Rechnungen in gemeinsam genutzten Umgebungen. Trennen Sie die Abrufrichtlinie von der Erstellungsrichtlinie. Verfälschte Dokumente können die Antworten beeinflussen, ohne die Modellgewichte zu ändern.
Operative Kontrollliste
Erhalten Sie Zeiten und Kosten neben den funktionalen Ergebnissen. Frühzeitige Sichtbarkeit verhindert überraschende Rechnungen in gemeinsam genutzten Umgebungen.
Überprüfen und bereinigen Sie den eingehenden Inhalt. Behandeln Sie unzuverlässige Datensätze als Angriffsfläche.
Persistenz verwandelt Demos in Systeme: Threads, menschliche Beteiligung sowie Debugging-Methoden wie Zeitreise-Debugging hängen davon ab.
Platzieren Sie Typen zusammen mit Komponenten und halten Sie die Eigenschaften begrenzt. Zu umfangreiche Eigenschaftensätze führen zu den Problemen, die TypeScript verhindern soll.
Schreiben Sie ein kurzes Handbuch: Wechseln Sie Schlüssel, leeren Sie Warteschlangen und rollen Sie die letzte Änderung zurück.
Zur Absicherung sollten vor dem Codeändern Eingaben, der Verantwortliche für den Schritt sowie die Abbruchkriterien definiert werden. Operator:innen sollten in der Lage sein, den Schritt von einem bekannten Checkpoint aus erneut auszuführen, ohne auf versteckten Zustände schließen zu müssen.
Erhalten Sie Zeiten und Kosten neben den funktionalen Ergebnissen. Frühzeitige Sichtbarkeit verhindert überraschende Rechnungen in gemeinsam genutzten Umgebungen.
Trennen Sie die Abrufrichtlinie von der Generierungsrichtlinie. Vergiftete Dokumente können Antworten lenken, ohne die Modellgewichte zu ändern.
Zur Stärkung der Sicherheit sollten Sie vor dem Ändern des Codes die Eingaben, den Verantwortlichen für den jeweiligen Schritt sowie die Beendigungskriterien definieren. Die Operator sollten in der Lage sein, den Schritt von einem bekannten Checkpoint aus erneut auszuführen, ohne auf versteckte Zustände schließen zu müssen.
Dokumentieren Sie sowohl den erfolgreichen Ablauf als auch den Notfallweg gemeinsam. Wiederholte Versuche sowie die Handhabung fehlerhafter Nachrichten gehören zum Produkt.
Überprüfen und bereinigen Sie den eingehenden Inhalt. Behandeln Sie unzuverlässige Datensätze als Angriffsfläche.