Skip to main content

Gestion de Estado

La app utiliza un patron hibrido para la gestion de estado:
  • Zustand para estado local/cliente (UI, sesion, preferencias)
  • TanStack React Query para estado del servidor (datos remotos, cache, sincronizacion)
  • React Context para funcionalidades transversales de UI

Zustand Stores

Ubicados en src/shared/stores/:

Detalle: authStore (Almacenamiento Hibrido)

El authStore implementa un sistema de almacenamiento hibrido para separar datos sensibles de datos regulares:
El authStore usa partialize para seleccionar que datos se persisten y un createHybridStorage personalizado que enruta automaticamente los datos sensibles a SecureStore y el resto a AsyncStorage.

Detalle: chatStore (Middlewares)

TanStack React Query

La configuracion del QueryClient se define en src/shared/constants/queryClient.ts:
El queryClient se exporta desde app/_layout.tsx y se inicializa una sola vez. El servicio queryInvalidationService se conecta al cliente para permitir invalidaciones de cache desde cualquier parte de la app.

React Contexts

BottomSheetContext

Ubicacion: src/shared/contexts/BottomSheetContext.tsxGestiona bottom sheets globales usando @gorhom/bottom-sheet. Provee:
  • showBottomSheet(config) - Mostrar un bottom sheet
  • hideBottomSheet() - Ocultar el bottom sheet activo
  • hideAllBottomSheets() - Ocultar todos los bottom sheets
Envuelve toda la aplicacion desde el Root Layout.

ScrollContext

Ubicacion: src/shared/contexts/ScrollContext.tsxTracking de scroll offset y viewport height. Permite a componentes hijos reaccionar a la posicion de scroll del contenedor padre.

Diagrama de Flujo de Estado

Middlewares de Zustand Utilizados

El onboardingStore implementa persistencia manual con AsyncStorage directamente (sin el middleware persist), lo que le da mayor control sobre el formato de almacenamiento.