Реакт нэйтив переводится в чистый JS, а затем движок Bridge выполняет операции в нужной ОС по инструкции JS
Для создания первых приложений очень удобно будет использовать Expo CLI для развёртывания приложения на React
Создаем проект с помощью expo-cli
Так же можно в наличии шаблоны на ts
Изучаем структуру проекта
app.json - настройки expo
app.js - корневой компонент приложения (вместо index.js, как в обычном реакт)
Дальше всё как в обычном веб-приложении
Запуск проекта
Запускаем приложение классической командой
Про Metro Bundler
Metro Bundler позволяет интерпретировать любой системе (ios/android/pc), что написано на JS и выполнить заданные действия. JS будет выполнять определённое действие и MB будет объяснять всем ОС, что нужно будет сделать, чтобы отобразить данные нативные элементы
Скачиваем Android Studio и настраиваем
Лучше молить бога, чтобы всё запустилось - смотрим туториалы
Запускаем на реальном устройстве приложение
Устанавливаем Expo Go на своё устройство
Сканируем QR или вставляем ссылку
И получаем итоговое приложение на Андроид
Скачиваем scrcpy для шаринга экрана устройства на ПК
Тут находится приложение для шаринга экрана на компьютер. У телефона должен быть включён режим отладки, чтобы получить к нему доступ по кабелю
Запускаем Expo в устройстве и открываем наше приложение
В терминале нужно нажать m и в телефоне нужно подключить горячую перезагрузку, чтобы изменения применялись автоматически после сохранения
Начальная разработка приложения и стилизация
Изначально мы имеем два элемента, которые работают аналогично и в браузере:
View - это замена для элемента div, который хранит в себе элементы
Text - это замена для элемента p, который хранит в себе текст, но с одной оговоркой - мы обязательно должны использовать этот элемент для хранения текста
Если нам нужно будет передать классы или напрямую стили, нам нужно будет использовать атрибут style.
Для генерации стилей мы можем использовать StyleSheet.create(), что является аналогом createStyles из materialui
App.js
Устанавливаем styled-components для стилизации компонентов
Устанавливаем стилизованные компоненты
И далее можем реализовывать более простым образом компоненты, как на сайтах. Но с одним отличием - импортируем стилевые компоненты из /native
Начинаем верстать статью
Компонент StatusBar отодвигает все элементы от статусбара
Создаём пост в отдельном файле
Так же тут нужно обратить внимание, что для отображения изображений, нужно использовать компонент Image
components / Post / Post.jsx
И далее используем данный компонент с обычной передачей пропсов
App.js
Устанавливаем Axios и делаем запрос на получение статей
Воспользуемся mockAPI для генерации данных.
Далее мы просто воспользуемся useEffect и useState, как в обычном реакте, чтобы получить данные и отобразить их через map.
Так же отдельно можно отметить, что мы можем выводить сообщение об ошибке, если воспользуемся Alert
App.js
Тут нужно отметить, что без flex: 1 текст будет уходить за границы экрана
Как правильно рендерить список с возможностью скролла (FlatList)
Однако для рендера экрана, который будет поддерживать скролл, нужно будет воспользоваться компонентом FlatList, который предоставит нам рендер большого списка.
Атрибут data принимает в себя сам массив данных, а атрибут renderItem уже принимает в себя объект с полем item, в котором и хранятся наши данные. Тут нам для отрисовки не нужно передавать атрибут key в компонент, так как FlatList делает это автоматически
Сделать иконку загрузки мы можем через использование компонента ActivityIndicator и useState, который будет хранить статус загрузки изменяемый в fetchPosts
App.js
Перезагрузка контента по свайпу (RefreshController)
Далее нам нужно реализовать функционал, когда по свайпу сверху вниз, мы будем подгружать новые данные пользователя
Для этого уже используется атрибут refreshControl внутри FlatList и компонент RefreshControl
refreshing - boolean обновления данных
onRefresh - отвечает за действие во время перезагрузки
Делаем статью кликабельной (TouchableOpacity)
Для отслеживания нажатия на элемент и реагирования на это действие, мы можем использовать TouchableOpacity - он автоматически будет менять отображение при нажатии на элемент и так же через onPress позволит вызывать функционал
И теперь происходит изменение opacity у активного элемента, на который кликают
Создаем экран отображения полной статьи FullPostScreen
Далее стоит разделить приложение на отдельные страницы, которые принято называть скринами и далее реализуем страницу отдельного поста
screens > PostScreen.jsx
Подключаем роутинг с помощью React Navigation
Для реализации стандартной навигации потребуются следующие пакеты:
И уже таким образом реализуется навигация по приложению. Все имена роутов должны быть уникальными. Самый верхний скрин отобразится первым. В options мы передаём тот заголовок, который отобразится на странице приложения
screens > Navigation.jsx
И далее нам нужно в главном компоненте передать чистый навигатор без всяких обёрток и статусбара, так как за нас всё настроить навигационный контейнер
App.js
Делаем переход на экран полной записи при клике на статью
Первым делом нужно получить объект navigation из пропсов, который попадает туда из роутера приложения. Этот объект хранит функции для работы с роутингом нашего приложения. Далее нужно на TouchableOpacity повесить функцию navigate
screens > HomeScreen.jsx
screens > PostScreen.jsx
И теперь мы можем с родительского экрана перейти в дочерний и имеем возможность выйти из нужного нам места