Partage
  • Partager sur Facebook
  • Partager sur Twitter

Redux - React Native

    20 décembre 2023 à 16:11:34

    Bonjour,

    J'utilise Redux pour mon application react native, et j'aimerais avoir des astuces pour l'utiliser proprement et efficacement

    Ce que je veux faire : 

    • Stocker des elements dans le store -> localstorage (elements de connexion)
    • Verifier si l’utilisateur est connecté pour afficher la bonne stack

    Mon slice 

    import { createSlice } from '@reduxjs/toolkit';
    import AsyncStorage from '@react-native-async-storage/async-storage';
    
    const initialState = {
      userInfo: { id: null, role: null },
      isLoggedIn: false, // Ajout de la propriété `isLoggedIn`
    };
    
    const authSlice = createSlice({
      name: 'auth',
      initialState,
      reducers: {
        login: (state, action) => {
          // Simulation de la connexion avec les informations fournies (email, mot de passe)
          state.userInfo = { id: 1, role: 2 };
    
          // Stockez les informations utilisateur dans AsyncStorage
          AsyncStorage.setItem('userInfo', JSON.stringify(state.userInfo));
          state.isLoggedIn = true;
        },
        logout: async (state) => {
          // Réinitialisation des informations utilisateur après la déconnexion
          state.userInfo = { id: null, role: null };
    
          // Suppression des informations utilisateur d'AsyncStorage lors de la déconnexion
          await AsyncStorage.removeItem('userInfo');
          state.isLoggedIn = false;
        },
      },
    });
    
    export const { login, logout } = authSlice.actions;
    
    export default authSlice.reducer;
    

    Ma gestion des stack

    import React, { useEffect, useState } from 'react';
    import { View, ActivityIndicator } from 'react-native';
    import { useSelector, useDispatch } from 'react-redux';
    import { NavigationContainer } from '@react-navigation/native';
    
    import AuthStack from './AuthStack';
    import UserStack from './UserStack';
    import AdminStack from './AdminStack';
    
    const AppNav = () => {
    
      const userRole = useSelector((state) => state.auth.userInfo.role);
      const isLoggedIn = useSelector((state) => state.auth.isLoggedIn); // Ajout de la vérification d'authentification
    
      console.log(userRole);
      console.log(isLoggedIn);
    
      if (!isLoggedIn) { // Vérification de l'état de connexion
        return (
          <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
            <ActivityIndicator size={'large'} />
          </View>
        );
      }
    
      let StackToRender = AuthStack; // Par défaut, afficher AuthStack s'il y a un problème avec les rôles ou l'identification
    
      switch (userRole) {
        case 2:
          StackToRender = UserStack;
          break;
        case 3:
          StackToRender = AdminStack;
          break;
        default:
          StackToRender = AuthStack;
          break;
      }
    
      return (
        <NavigationContainer>
          <StackToRender />
        </NavigationContainer>
      );
    };
    
    export default AppNav;
    

    Comment je peux verifier si mon utilisateur est connecté jaffiche la bonne stack selon son role et si il est pas connecté on affiche la stack auth

    Merci d'avance


    • Partager sur Facebook
    • Partager sur Twitter

    Redux - React Native

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    • Editeur
    • Markdown