Mantener el estado de React useReducer en sessionStorage
Mantener el estado de React useReducer en sessionStorage tras las recargas, con mecanismos de serialización para que la interfaz siga funcionando tras un refresh sin que se filtren secretos al almacenamiento.
Fuentes: How to Persist React useReducer State with sessionStorage
La solución
Dokumente tanto el camino óptimo como el de recuperación. Las reintentos y el manejo de mensajes no entregados forman parte del producto. Separe la política de recuperación de la política de generación. Los documentos dañinos pueden influir en las respuestas sin cambiar los pesos del modelo.
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)
}
Cómo funciona
Separe la política de recuperación de la política de generación. Los documentos dañinos pueden influir en las respuestas sin cambiar los pesos del modelo.
Ejemplo rápido de uso
Separe la política de recuperación de la política de generación. Los documentos dañinos pueden influir en las respuestas sin cambiar los pesos del modelo.
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>
)
}
Obtenga el código
Registre los tiempos y costos junto con los resultados funcionales. La visibilidad temprana evita facturas inesperadas en entornos compartidos. Separe la política de recuperación de la política de generación. Los documentos dañinos pueden influir en las respuestas sin cambiar los pesos del modelo.
Lista de verificación operativa
Registre los tiempos y costos junto a los resultados funcionales. La visibilidad temprana evita facturas inesperadas en entornos compartidos.
Valide y sane el contenido ingerido. Trate los corpus no confiables como una superficie de ataque.
La persistencia convierte las demostraciones en sistemas: los hilos, la intervención humana y la depuración mediante viajes en el tiempo dependen de ella.
Aloje los tipos junto a los componentes y mantenga las propiedades limitadas. Un gran número de propiedades genera la deuda que TypeScript estaba destinado a prevenir.
Escriba un manual breve: rotar claves, vaciar colas y revertir el último cambio.
Para el fortalecimiento número 0, defina las entradas, el responsable de la tarea y los criterios de finalización antes de modificar el código. Los operadores deben poder volver a ejecutar la tarea desde un punto de control conocido sin tener que adivinar el estado oculto.
Registre los tiempos y costos junto a los resultados funcionales. La visibilidad temprana evita facturas inesperadas en entornos compartidos.
Separar la política de recuperación de la política de generación. Los documentos contaminados pueden influir en las respuestas sin cambiar los pesos del modelo.
Para reforzar el punto 1, defina las entradas, el responsable de la etapa y los criterios de finalización antes de modificar el código. Los operadores deben poder volver a ejecutar la etapa a partir de un punto de control conocido sin tener que adivinar el estado oculto.
Documente tanto la ruta óptima como la ruta de recuperación. Las intentonas repetidas y el manejo de mensajes no entregados forman parte del producto.
Valide y sanee el contenido ingerido. Trate los corpus no confiables como una superficie de ataque.
Lecturas relacionadas
- La velocidad de React comienza con la organización del árbol de componentes — Las actualizaciones repetidas no son el enemigo; lo es la propagación excesiva del estado. Mueva las fuentes hacia las hojas antes de aplicar memorización micro.