SmarMaker - Documentation
Docs» front:stockage_de_donnees

**Ceci est une ancienne révision du document !**

Stockage de données

Documentation IndexedDB
Documentation localStorage
Documentation sessionStorage
Documentation React-redux
Documentation Redux Toolkit

Redux est une lib de gestion d'état global dans une application React. Cet état est stocké en mémoire mais disparaît lors d'un rechargement de page. Pour le rendre persistant, on peut l'associer aux mécanismes de stockage du navigateur:

  • sessionStorage qui conserve les données uniquement le temps de la session
  • localStorage qui conserve les données même après la fermeture du navigateur
  • IndexedDB qui constitue une base de données côté client sans limite de temps

### Monter son Redux store

Le store Redux est l’objet qui contient l’état global. Pour le mettre en place, il faut utiliser Redux Toolkit:

  • On crée des slices (“portions” d’état) contenant des actions. On s'occupe ici du slice de session (redux/reducers/sessionSlice.js) pour gérer l'authentification.
import { createSlice } from "@reduxjs/toolkit";

const initialState = {
    data: JSON.parse(sessionStorage.getItem("session")) ?? null
};

const sessionSlice = createSlice({
    name: "session",
    initialState,
    reducers: {
        setSession(state, action) {
            const session = action.payload;
      
            state.data = session;
            sessionStorage.setItem("session", JSON.stringify(session));
        },
        unsetSession(state) {
            state.data = null;
            sessionStorage.removeItem("session");
        }
    },
});

export default sessionSlice.reducer;
export const { setSession, unsetSession } = sessionSlice.actions;
  • On combine les reducers issus des slices via combineReducers et configure le store via configureStore dans redux/index.js par exemple. On oublie pas d'exporter ce store.
import sessionReducer from "./reducers/sessionSlice";

import { combineReducers } from "redux";
import { configureStore } from "@reduxjs/toolkit";

const rootReducer = combineReducers({
  session: sessionReducer
});

export const redux = configureStore({ reducer: rootReducer });

On peut aussi exporter toutes les actions du slice dans l'index qui sert de point d'entrée du Redux store (facultatif).

export * from "./reducers/sessionSlice";
  • On passe ce store à <Provider> de react-redux qui englobe toute l'application. Pour rester bien organiser, on va créer un composant ReduxProvider.
import { Provider } from "react-redux";
import { redux } from "../../../redux";

export const ReduxProvider = (props) => {
    const { children } = props;

    return (
        <Provider store={redux}>
            {children}
        </Provider>
    );
};
import { Router } from "./components/app/Router";
import { ReduxProvider } from "./components/app/ReduxProvider";

export const App = () => {
    return (
        <ReduxProvider>
            <Router />
        </ReduxProvider>
    );
};

Maintenant l'état global de Redux est accessible dans n'importe quel fichier utilisé au sein du ReduxProvider.

Utiliser l'état global

Pour récupérer l'état global, React-redux met à disposition useSelector.

Maintenant qu'on a les moyens de savoir si une session est ouverte, reprenons nos composants PublicRoutes et PrivateRoutes et remplaçons cette condition “test”.

import { Outlet, Navigate } from "react-router-dom";
import { useSelector } from "react-redux";

export const PublicRoutes = () => {
    const session = useSelector(state => state.session.data);
    
    return session ? <Navigate to="/" : <Outlet />;        
};
import { Outlet, Navigate } from "react-router-dom";
import { useSelector } from "react-redux";

export const PrivateRoutes = () => {
    const session = useSelector(state => state.session.data);
    
    return session ? <Outlet /> : <Navigate to="/login" />;        
};
Previous Next

Made with ❤ by CAP-REL · SmartMaker · GNU AGPL v3+
Code source · Faire un don
SmarMaker - Documentation
Traductions de cette page:
  • Français
  • Deutsch
  • English
  • Español
  • Italiano
  • Nederlands

Table of Contents

  • SmartAuth
  • SmartMaker - Back (PHP)
    • Mapping Dolibarr - React
  • SmartMaker - Front (React)
    • Animations de pages
    • Architecture
    • Astuces
    • Calendar
    • Composants et pages
    • Configuration du Provider
    • Debug et Logs
    • Hooks SmartCommon
    • PWA (Progressive Web App)
    • Requêtes API
    • Routage
    • SmartCommon
    • Stockage de données
    • Synchronisation offline
    • Thèmes
    • Traductions
  • HowTo - Pas à pas - Votre première application
    • Développement PHP (back)
    • Développement React (front)
    • Première étape : Module Builder Dolibarr
    • SmartAuth
    • SmartBoot : Un squelette prêt à l'emploi
  • Formation SmartMaker
    • Module 1 : Fondamentaux JavaScript ES6+
      • Chapitre 1 : Variables et Scope
      • Chapitre 2 : Fonctions
      • Chapitre 3 : Programmation Asynchrone
      • Chapitre 4 : Modules ES6
    • Module 2 : Introduction à React
      • Chapitre 1 : Philosophie React
      • Chapitre 2 : JSX
      • Chapitre 3 : Composants
    • Module 3 : Hooks React Fondamentaux
      • Chapitre 1 : useState
      • Chapitre 2 : useEffect
      • Chapitre 3 : useRef
      • Chapitre 4 : useContext
    • Module 4 : React Avancé
      • Chapitre 1 : useCallback et useMemo
      • Chapitre 2 : Custom Hooks
      • Chapitre 3 : Redux et Redux Toolkit
    • Module 5 : Architecture SmartMaker
      • Chapitre 1 : Structure du projet
      • Chapitre 2 : Configuration
      • Chapitre 3 : Flux de données
    • Module 6 : SmartCommon - Composants
      • Chapitre 1 : Mise en page
      • Chapitre 2 : Navigation
      • Chapitre 3 : Formulaires
      • Chapitre 4 : Affichage
    • Module 7 : SmartCommon - Hooks
      • Chapitre 1 : useApi
      • Chapitre 2 : Gestion d'état
      • Chapitre 3 : Hooks utilitaires
      • Chapitre 4 : Synchronisation Offline
    • Module 8 : Backend API (PHP)
      • Chapitre 1 : Routage
      • Chapitre 2 : Controllers
      • Chapitre 3 : Mappers
      • Extrafields et formulaires dynamiques
    • Module 9 : Intégration complète
      • Chapitre 1 : Backend
      • Chapitre 2 : Frontend
      • Chapitre 3 : Déploiement
    • Module 10 : Fonctionnalités avancées
      • Chapitre 1 : Mode offline
      • Chapitre 2 : Internationalisation (i18n)
      • Chapitre 3 : Autres fonctionnalités
    • Module 11 : Bonnes pratiques
  • Démonstration
  • Start
  • Composants et pages
  • Afficher le texte source
  • Anciennes révisions
  • Liens de retour
  • Haut de page