Accueil / Articles

Conserver l’état de React useReducer dans sessionStorage

Conserver l’état de React useReducer dans sessionStorage après chaque recharge, avec des mécanismes de sérialisation pour que l’interface reste fonctionnelle lors d’un renouvellement sans que des informations sensibles ne soient stockées.

Éditeur : REACTAPP.TOP2 min de lecture540 mots

Sources: How to Persist React useReducer State with sessionStorage

La solution

Dokumentez ensemble le parcours normal et le parcours de récupération. Les tentatives répétées ainsi que la gestion des messages non livrés font partie intégrante du produit. Séparez la politique de récupération de la politique de génération. Les documents falsifiés peuvent influencer les réponses sans modifier les poids du modèle.

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)
}

Fonctionnement

Séparez la politique de récupération de la politique de génération. Les documents falsifiés peuvent influencer les réponses sans modifier les poids du modèle.

Exemple d’utilisation rapide

Séparez la politique de récupération de la politique de génération. Les documents falsifiés peuvent influencer les réponses sans modifier les poids du modèle.

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>
  )
}

Récupérer le code

Enregistrez les temps d’exécution et les coûts à côté des résultats fonctionnels. Une visibilité précoce permet d’éviter des factures inattendues dans les environnements partagés. Séparez la politique de récupération de la politique de génération. Les documents falsifiés peuvent influencer les réponses sans modifier les poids du modèle.

Liste de contrôle opérationnelle

Enregistrez les temps d’exécution et les coûts à côté des résultats fonctionnels. Une visibilité précoce évite les factures inattendues dans les environnements partagés.

Vérifiez et nettoyez le contenu ingéré. Traitez les corpus non fiables comme une surface d’attaque.

La persistance transforme les démos en systèmes : les threads, l’intervention humaine et le débogage par voyage dans le temps en dépendent.

Colocalisez les types avec les composants et restreignez le nombre de propriétés. Un grand nombre de propriétés crée la dette que TypeScript était censé éviter.

Rédigez un petit manuel opérationnel : rotatez les clés, videz les files d’attente, revenez à la dernière version modifiée.

Pour le renforcement de sécurité, définissez les entrées, le responsable de l’étape et les critères de fin avant de modifier du code. Les opérateurs doivent pouvoir relancer l’étape à partir d’un point de contrôle connu sans deviner l’état caché.

Enregistrez les temps d’exécution et les coûts à côté des résultats fonctionnels. Une visibilité précoce évite les factures inattendues dans les environnements partagés.

Séparez la politique de récupération de la politique de génération. Les documents contaminés peuvent orienter les réponses sans modifier les poids du modèle.

Pour renforcer la sécurité, définissez les entrées, le responsable de l’étape et les critères d’arrêt avant de modifier le code. Les opérateurs doivent pouvoir relancer l’étape à partir d’un point de contrôle connu sans deviner l’état caché.

Dokumentez à la fois le parcours normal et le parcours de récupération. Les tentatives répétées et la gestion des messages non livrés font partie intégrante du produit.

Vérifiez et nettoyez le contenu ingéré. Traitez les corpus non fiables comme une surface d’attaque.