Как создать приложение для медитации на Expo Router: полный гайд от freeCodeCamp.org

freeCodeCamp.org 151 тыс. 1 ч 55 мин 4 мин 02.07.2024
Главное

В новом обучающем курсе от платформы freeCodeCamp.org разработчик Стивен Гарсия (Steven Garcia) детально разбирает процесс создания мобильного приложения для медитации. Проект строится на стеке React Native и Expo Router с использованием TypeScript и NativeWind для стилизации, предлагая разработчикам среднего уровня освоить современные подходы к кроссплатформенной разработке .

🛠 Подготовка окружения и запуск проекта 3:41

Перед началом работы Стивен Гарсия подчеркивает, что данный курс не предназначен для абсолютных новичков и предполагает знание основ веб-разработки: JavaScript, React и Tailwind CSS . Для локальной разработки автор рекомендует использовать симуляторы: Xcode для iOS (только на macOS) и Android Studio для Android .

Основные шаги по настройке среды:

Инициализация проекта выполняется командой npx create-expo-app@latest. Автор называет проект simple-meditation . После установки зависимостей проект запускается через npx expo start --clear, что генерирует QR-код для тестирования в приложении Expo Go или позволяет запустить симулятор нажатием клавиш i (iOS) или a (Android) .

📂 Архитектура и файловый роутинг в Expo Router 11:41

Expo Router привносит в мобильную разработку привычную по Next.js концепцию файлового роутинга. По мнению Стивена Гарсии, это значительно упрощает навигацию в приложении .

Структура проекта после очистки от бойлерплейта:

  1. Директория app: Содержит основные экраны и файлы макетов (_layout.tsx).
  2. Директория assets: Шрифты, изображения и аудиофайлы (доступны по ссылке в описании видео) .
  3. Директория components: Переиспользуемые элементы интерфейса.
  4. Директория constants: Статические данные (списки медитаций, пути к изображениям) .

Гарсия объясняет работу файла _layout.tsx, который определяет общую структуру интерфейса для всех вложенных файлов в папке. Использование компонента Slot из expo-router позволяет рендерить дочерние маршруты внутри макета, подобно children в веб-приложениях .

🎨 Стилизация с помощью NativeWind и создание главной страницы 18:38

Для верстки приложения используется NativeWind — адаптация Tailwind CSS для React Native. Процесс установки включает:

Главная страница приложения создается на базе компонента ImageBackground с использованием эффекта линейного градиента. Для этого устанавливается библиотека expo-linear-gradient . Стивен демонстрирует создание переиспользуемого компонента CustomButton.tsx, который принимает пропсы onPress, title, а также кастомные стили для контейнера и текста .

🧘 Реализация списка медитаций и вкладочной навигации 34:31

Для организации навигации в нижней части экрана (tabs) создается директория (tabs). Круглые скобки в названии папки в Expo Router означают создание группы маршрутов, которая не отображается в URL пути .

Основные этапы разработки экрана «Nature Meditate»:

Стивен акцентирует внимание на создании компонента AppGradient.tsx, который оборачивает контент в линейный градиент и SafeAreaView, предотвращая перекрытие элементов системными индикаторами (заряд батареи, время) .

🔋 Логика таймера и воспроизведение аудио 1:24:43

Сердце приложения — экран медитации с обратным отсчетом. Логика строится на хуках useState и useEffect.

Для корректного отображения времени Стивен реализует функцию форматирования, которая добавляет ведущие нули (padding), используя методы math.floor и padStart(2, "0") .

📝 Аффирмации и глобальное состояние через Context API 56:06

Раздел аффирмаций организован как горизонтальная галерея категорий. Каждая категория ведет на отдельный экран, где текст аффирмации разбивается на предложения по точкам и выводится в виде списка .

Для управления длительностью медитации на разных экранах автор внедряет React Context API :

  1. Создается TimerContext для хранения значения duration и функции setDuration.
  2. Компонент TimerProvider оборачивает всё приложение в _layout.tsx, делая состояние доступным в любом дочернем компоненте .
  3. Это позволяет пользователю выбрать длительность в модальном окне (Modal), и это изменение мгновенно отразится на главном экране таймера без «прокидывания» пропсов (prop drilling) .

В завершение курса Стивен Гарсия отмечает, что созданное приложение — это отличная база для портфолио, демонстрирующая владение современными инструментами экосистемы Expo .

💬 Цитаты

«Expo Router обеспечивает маршрутизацию на основе файлов... это делает ее более похожей на веб-разработку, когда речь заходит о навигации.»

Стивен Гарсия 14:24

«Этот курс не для новичков. Он делает много предположений о том, что у вас есть четкое понимание основ веб-разработки.»

Стивен Гарсия 02:44
👥 Спикер
🔗 Упомянутые сайты и проекты
📖 Термины
NativeWind
Библиотека, позволяющая использовать классы Tailwind CSS для стилизации компонентов React Native.
Expo Router
Библиотека для маршрутизации в приложениях Expo, использующая структуру файловой системы.
Prop Drilling
Процесс передачи данных от родительского компонента к глубоко вложенному дочернему через все промежуточные уровни.
Hot Reloading
Функция, которая автоматически обновляет приложение при сохранении изменений в коде без полной перезагрузки.
📊 Цифры
🗓 Хронология
  1. 0:00 Начало курса и обзор функционала готового приложения.
  2. 18:38 Установка и настройка NativeWind для стилизации.
  3. 1:03:47 Переход к реализации системы вложенных маршрутов для аффирмаций.
  4. 1:34:54 Установка библиотеки expo-av для работы со звуком.
  5. 1:48:12 Внедрение React Context API для управления глобальным состоянием таймера.
⚖️ Другая сторона
Технологии и IT React Native Expo Router TypeScript NativeWind Context API