Урок 12

Итоги курса

Курс о данных и состоянии в React Native.

Что ты узнал

  • Fetch и axios — запросы, interceptors, токены
  • TanStack Query — кеш, refetch, офлайн
  • AsyncStorage — настройки, кеш, SecureStore для токенов
  • Формы и API — валидация, отправка, ошибки
  • Офлайн-режим — NetInfo, очередь, оптимистичные обновления
  • Pull to refresh и пагинация — useInfiniteQuery, onEndReached
  • Глобальное состояние — Zustand, Redux, Context
  • Синхронизация — invalidation, focus, события
  • Кеширование — staleTime, persist, prefetch
  • WebSocket — real-time, переподключение, интеграция
  • Тестирование — MSW, Testing Library

Ключевые идеи

Серверные данные — в TanStack Query. Не в Zustand, не в Context.

Клиентское состояние — в Zustand. Корзина, тема, настройки.

Токены — в SecureStore. Никогда в AsyncStorage.

Офлайн — обязателен. Мобильные приложения работают в метро, лифте, деревне.

Оптимистичные обновления. UI мгновенный, синхронизация в фоне.

Refetch on focus. Данные свежие при возврате на экран.

Persist для кеша. Приложение открывается офлайн — данные из кеша.

Частые ошибки

  • Токены в AsyncStorage
  • Нет AbortController
  • Данные сервера в Zustand
  • Нет обработки офлайн
  • Не инвалидировать после мутаций
  • Inline-функции в FlatList
  • Нет onEndReachedThreshold
  • Не тестировать на реальном устройстве с плохой сетью

Что дальше

  • Мобильная специфика — камера, уведомления, публикация

Полезные ссылки

  • TanStack Query: tanstack.com/query
  • Zustand: github.com/pmndrs/zustand
  • AsyncStorage: react-native-async-storage.github.io
  • SecureStore: docs.expo.dev/versions/latest/sdk/securestore
  • NetInfo: github.com/react-native-netinfo/react-native-netinfo
  • MSW: mswjs.io

Заключение

Данные — сердце мобильного приложения. TanStack Query даёт кеш, refetch, офлайн. SecureStore защищает токены. Zustand хранит клиентское состояние. WebSocket — real-time. Освоив это, ты можешь строить приложения, которые работают в любых условиях. Помни: тестируй офлайн, кэшируй разумно, не храни пароли в AsyncStorage.