Кроссплатформенный разработчик React Native(Начальный уровень)
Учебная программа курса Кроссплатформенный разработчик React Native начального уровня направлена на
подготовку специалистов, способных создавать мобильные приложения для платформ Android и iOS с использованием фреймворка React Native. В рамках курса слушатели освоят основы JavaScript, работу с компонентами интерфейса, навигацию в приложении, взаимодействие с API и локальным хранилищем данных. Также будут рассмотрены принципы кроссплатформенной разработки, интеграция сторонних библиотек, отладка и тестирование приложений.
В ходе обучения предстоит пройти следующие тематические модули
основы JavaScript и TypeScript необходимые для работы с React Native
знакомство с экосистемой React и базовые понятия JSX, компоненты, props, state
создание пользовательского интерфейса с использованием встроенных компонентов React Native
реализация навигации между экранами (stack navigation, tab navigation)
работа с асинхронными данными и REST API
хранение локальных данных через AsyncStorage и SQLite
основы стилизации и адаптивного дизайна под разные устройства
введение в архитектурные подходы Redux и Context API
процесс сборки и публикации приложений в магазинах Google Play и App Store
После прохождения курса выпускник должен уметь
создавать функциональные мобильные приложения на React Native
использовать современные практики разработки для обеспечения производительности и читаемости кода
работать с сетевыми запросами и обрабатывать данные в формате JSON
применять системы управления состоянием приложения
выполнять отладку, тестирование и оптимизацию приложений
подготавливать проект к выпуску на целевые платформы
Выпускник должен знать
базовые концепции и синтаксис JavaScript и TypeScript
архитектуру приложений на React Native
основы HTTP-протокола и взаимодействия с серверами
способы организации структуры проекта и управления зависимостями
особенности кроссплатформенной разработки и способы достижения нативного UX
Курс также предусматривает выполнение практических заданий и итогового проекта, который позволит закрепить полученные знания и создать элемент портфолио.
Хотите узнать, насколько вам необходим этот курс и действительно ли вы разобрались в теме?
Пройдите короткий тест — он поможет определить, стоит ли углубляться в эту тему, или вы уже готовы двигаться дальше.
1. Что такое React Native и какова его основная цель в разработке мобильных приложений
React Native — это фреймворк, разработанный компанией Facebook для создания кроссплатформенных мобильных приложений с использованием JavaScript. Его основная цель — позволить разработчикам писать код один раз и запускать его на разных платформах (iOS и Android), сохраняя при этом нативное поведение и внешний вид приложения
2. В чём отличие React Native от React?
React используется для разработки веб-приложений, а React Native — для мобильных приложений. Основное отличие заключается в том, что React Native использует нативные компоненты вместо DOM-элементов, а также предоставляет специфичные для мобильных устройств API, такие как работа с камерой, геолокацией и другими датами
3. Как устроена архитектура React Native?
Архитектура React Native состоит из двух основных частей: JavaScript-движка, который выполняет логику приложения, и нативного движка, который отвечает за отрисовку интерфейса и работу с системными функциями. Эти части общаются между собой через мост (bridge)
4. Что такое JSX и как он используется в React Native?
JSX (JavaScript XML) — это расширение синтаксиса, позволяющее писать HTML-подобную разметку прямо в JavaScript-коде. В React Native JSX используется для описания структуры пользовательского интерфейса, которую затем преобразуют в нативные компоненты
5. Что такое компонент в React Native?
Компонент — это строительный блок приложения в React Native. Он может быть функциональным или классовым и представляет собой переиспользуемый элемент пользовательского интерфейса, который может иметь собственное состояние и свойства
6. Чем отличаются функциональные компоненты от классовых?
Функциональные компоненты — это обычные JavaScript-функции, которые принимают props и возвращают JSX. Классовые компоненты — это ES6-классы, наследующие от React.Component, и имеют дополнительные возможности, такие как состояние и методы жизненного цикла. С появлением хуков предпочтение чаще отдаётся функциональным компонентам
7. Что такое props в React Native?
Props (short for properties) — это данные, передаваемые от родительского компонента к дочернему. Они позволяют делать компоненты более гибкими и переиспользуемыми, так как изменение props влияет на отображение и поведение компонента
8. Что такое state в React Native?
State — это внутреннее состояние компонента, которое может изменяться со временем, обычно в ответ на действия пользователя или другие события. Изменение состояния вызывает повторный рендеринг компонента
9. Как работают хуки в React Native?
Хуки — это специальные функции, которые позволяют использовать состояние и другие возможности React в функциональных компонентах без необходимости использования классов. Например, useState и useEffect — два самых популярных хука
10. Что делает хук useState?
Хук useState позволяет добавлять реактивное состояние в функциональные компоненты. Он возвращает текущее значение состояния и функцию для его обновления
11. Что делает хук useEffect?
Хук useEffect используется для выполнения побочных эффектов в функциональных компонентах, таких как загрузка данных, подписка на события или прямое взаимодействие с нативными модулями. Он заменяет методы жизненного цикла в классовых компонентах
12. Что такое ключ (key) в списке компонентов и почему он важен?
Ключ — это уникальный идентификатор, который помогает React Native определить, какие элементы списка были изменены, добавлены или удалены. Правильное использование ключей улучшает производительность и предотвращает ошибки при рендеринге списков
13. Как создать список компонентов в React Native?
Список компонентов можно создать с помощью метода map(), применяя его к массиву данных и возвращая JSX-компонент для каждого элемента. Каждому элементу необходимо присвоить уникальный ключ
14. Какие встроенные компоненты используются в React Native для построения интерфейса?
Основные встроенные компоненты включают View (аналог div), Text (для отображения текста), Image (для отображения изображений), TextInput (поле ввода), Button (кнопка), ScrollView (прокручиваемый контейнер), FlatList (оптимизированный список) и другие
15. В чём разница между ScrollView и FlatList?
ScrollView загружает все элементы сразу, что неэффективно для больших списков. FlatList, напротив, рендерит только те элементы, которые находятся на экране, что значительно улучшает производительность при работе с большими наборами данных
16. Что такое StyleSheet в React Native?
StyleSheet — это API, позволяющий стилизовать компоненты в React Native. Он предоставляет способ создания стилей, аналогичный CSS, но с некоторыми особенностями, связанными с мобильной средой
17. Как работает система стилизации в React Native?
Стилизация в React Native реализуется с помощью объектов JavaScript. Стили могут применяться к компонентам через свойство style. Поддерживаются многие CSS-свойства, но с синтаксисом camelCase и ограничениями, связанными с мобильной платформой
18. Что такое Flexbox и как он используется в React Native?
Flexbox — это система расположения элементов, которая позволяет гибко управлять выравниванием, направлением и порядком элементов. В React Native Flexbox является основным способом построения макетов
19. Как задать цвет текста или фона в React Native?
Цвета можно задавать с помощью строковых значений в формате hex (#FF5733), rgba или названий цветов (red, blue). Пример: color: 'blue', backgroundColor: '#ffffff'
20. Что такое TouchableOpacity и когда он используется?
TouchableOpacity — это компонент, который обеспечивает визуальную обратную связь при нажатии на элемент. Используется для создания кнопок и других интерактивных элементов
21. Как работают навигационные библиотеки в React Native?
Навигационные библиотеки, такие как React Navigation, предоставляют механизмы перехода между экранами. Они поддерживают различные типы навигации: стековую, табличную, Drawer и другие
22. Что такое стековая навигация?
Стековая навигация позволяет перемещаться между экранами, добавляя их поверх предыдущего экрана (push/pop). Реализуется с помощью Stack.Navigator из библиотеки React Navigation
23. Что такое таб-навигация?
Таб-навигация позволяет переключаться между несколькими экранами с помощью нижней или верхней панели с вкладками. Реализуется с помощью Tab.Navigator
24. Что такое Drawer Navigation?
Drawer Navigation — это навигация с боковым меню, которое открывается слева или справа. Используется для организации основных разделов приложения
25. Как передать параметры между экранами при навигации?
Параметры передаются через объект params при вызове метода navigate(). На целевом экране они доступны через route.params
26. Как получить доступ к текущему маршруту в React Navigation?
Доступ к информации о текущем маршруте осуществляется через хук useRoute() или через props.route в компоненте экрана
27. Что такое AsyncStorage и для чего он используется?
AsyncStorage — это асинхронное, постоянное хранилище пар ключ-значение. Используется для хранения небольших объёмов данных, таких как настройки пользователя или токены авторизации
28. Как установить и использовать сторонние библиотеки в React Native?
Сторонние библиотеки устанавливаются через npm или yarn. После установки их нужно импортировать в проект и следовать инструкциям по подключению, иногда требующим нативной конфигурации
29. Что такое Expo и в чём его преимущества?
Expo — это платформа и SDK, упрощающая разработку на React Native. Преимущества включают готовые компоненты, удобную отладку, Live Reload и возможность тестирования на мобильном устройстве без сборки
30. В чём отличие Expo от bare workflow в React Native?
Expo предоставляет абстракцию над нативным кодом и имеет ограниченный доступ к нативным API. Bare workflow позволяет полностью контролировать нативные части проекта, но требует больше усилий при настройке
31. Как проверить, на какой платформе работает приложение?
Для определения платформы используется модуль Platform из React Native. Метод Platform.OS возвращает 'ios' или 'android'
32. Как использовать платформенно-зависимый код?
Можно использовать условные выражения с Platform.OS или создавать файлы с суффиксами .ios.js и .android.js для автоматического выбора платформозависимого кода
33. Что такое Expo Snack и как он используется?
Expo Snack — это онлайн-редактор кода, позволяющий быстро прототипировать и тестировать React Native-приложения без установки среды разработки
34. Как происходит отладка приложений на React Native?
Отладка возможна через DevTools в Metro Bundler, использование console.log, подключение Chrome Debugger или инструментов IDE, таких как React Developer Tools
35. Что такое Hot Reloading и как он работает?
Hot Reloading — это функция, которая позволяет обновлять код приложения в реальном времени, сохраняя текущее состояние. Это полезно при активной разработке и тестировании
36. Что такое Live Reload?
Live Reload перезапускает приложение при любом изменении кода. В отличие от Hot Reloading, оно не сохраняет текущее состояние приложения
37. Что такое Redux и зачем он нужен в React Native?
Redux — это библиотека управления состоянием приложения. Она позволяет централизованно хранить и управлять состоянием, что особенно полезно в крупных приложениях
38. Какова архитектура Redux?
Redux следует однонаправленному потоку данных: Action → Reducer → State. Action описывает событие, Reducer обновляет состояние, а новое состояние становится доступным для компонентов
39. Что такое Context API и когда его стоит использовать?
Context API — это встроенное решение React для передачи данных глубоко вложенными компонентами без прокидывания props. Полезен для тем оформления, языковых настроек и других общих данных
40. В чём разница между Redux и Context API?
Redux предлагает более мощные инструменты управления состоянием, включая middleware, отладку и детерминированность. Context API проще в использовании, но менее масштабируем
41. Как работает fetch в React Native?
Fetch API используется для выполнения HTTP-запросов. Он поддерживает GET, POST и другие методы, возвращает Promise, который можно обработать с помощью async/await или .then()
42. Что такое JSON и как он используется в мобильных приложениях?
JSON (JavaScript Object Notation) — это формат обмена данными, широко используемый в REST API. В React Native JSON часто используется для получения и отправки данных через HTTP-запросы
43. Как сериализовать и десериализовать JSON в React Native?
JSON.stringify() используется для преобразования объекта в строку JSON, а JSON.parse() — для обратного процесса
44. Что такое async/await и как он используется в React Native?
async/await — это синтаксический сахар для работы с Promise. Он позволяет писать асинхронный код синхронно, улучшая читаемость и управляемость
45. Как работает AsyncStorage при работе с данными?
AsyncStorage работает асинхронно и не блокирует основной поток. Он позволяет хранить данные в виде строк и использовать методы getItem(), setItem(), removeItem() для манипуляций
46. Что такое SQLite и как его использовать в React Native?
SQLite — это лёгкая встраиваемая система управления базами данных. В React Native её можно использовать через сторонние библиотеки для хранения структурированных данных локально
47. Что такое Expo Camera и как он используется?
Expo Camera — это модуль, позволяющий получать доступ к камере устройства. Он поддерживает съёмку фото и видео, а также сканирование QR-кодов
48. Что такое Expo Location и как он используется?
Expo Location предоставляет доступ к геолокации устройства. Позволяет получать текущие координаты, подписываться на изменения местоположения и запрашивать разрешения у пользователя
49. Что такое Expo Push Notifications и как он работает?
Expo Push Notifications позволяет отправлять push-уведомления на устройства через сервис Expo. Для этого требуется зарегистрировать токен устройства и отправить уведомление через API
50. Что такое Expo FileSystem и как он используется?
Expo FileSystem предоставляет доступ к файловой системе устройства. Можно читать, записывать, удалять файлы и работать с медиа
51. Как использовать изображения в React Native?
Изображения можно использовать через компонент Image. Поддерживаются локальные файлы и URL-адреса. Также можно использовать сторонние библиотеки для кэширования и оптимизации
52. Как работать с шрифтами в React Native?
Шрифты можно подключать через Expo Font или нативные способы. После загрузки шрифта его можно использовать в стилях через fontFamily
53. Что такое Modal и как он используется?
Modal — это компонент, позволяющий отображать окно поверх текущего содержимого. Используется для показа диалогов, форм, уведомлений
54. Что такое ActivityIndicator и когда он используется?
ActivityIndicator — это компонент, отображающий анимацию загрузки. Используется при ожидании завершения асинхронной операции
55. Что такое Alert и как он используется?
Alert — это стандартный модуль для отображения простых диалоговых окон с сообщением и кнопками. Используется для уведомлений и подтверждений действий
56. Что такое KeyboardAvoidingView и зачем он нужен?
KeyboardAvoidingView — это компонент, автоматически корректирующий положение контента при открытии клавиатуры. Особенно полезен при работе с формами
57. Что такое StatusBar и как им управлять?
StatusBar — это компонент, позволяющий управлять отображением строки состояния устройства. Можно изменять цвет текста, фон, скрывать или показывать
58. Что такое Dimensions и как он используется?
Dimensions — это API, позволяющий получить размеры экрана устройства. Используется для адаптации макета под разные экраны
59. Что такое PixelRatio и как он помогает в разработке?
PixelRatio — это API, позволяющий определить плотность пикселей на экране устройства. Используется для корректного отображения изображений и размеров
60. Как подготовить приложение к публикации в App Store и Google Play?
Подготовка включает тестирование, оптимизацию, создание иконок, описание, сборку релизной версии и загрузку в магазины. Для iOS требуется Xcode, для Android — Android Studio
61. Что такое EAS Build и как он используется?
EAS Build — это сервис Expo для облачной сборки приложений. Упрощает процесс создания APK/IPA-файлов без локальной настройки нативных инструментов
62. Что такое Expo Application Services (EAS)?
EAS — это набор инструментов от Expo, включающий EAS Build, Submit, Update и другие, предназначенные для упрощения разработки, тестирования и публикации приложений
63. Как проверить, установлен ли Expo CLI?
Установку можно проверить командой expo --version в терминале. Если Expo CLI установлен, будет отображена версия
64. Как создать новый проект на React Native с помощью Expo CLI?
Проект создаётся командой expo init имя_проекта. Затем выбирается шаблон (bare или managed) и устанавливаются зависимости
65. Как запустить приложение на эмуляторе или устройстве через Expo CLI?
После установки зависимостей используется команда expo start, после чего можно выбрать запуск на эмуляторе или через приложение Expo Go на устройстве
66. Что такое Expo Go и зачем он нужен?
Expo Go — это приложение, доступное в App Store и Google Play, которое позволяет запускать и тестировать проекты Expo без сборки
67. Как проверить работоспособность нативных модулей в Expo?
В Expo Go есть поддержка большинства стандартных модулей. Для некоторых требуется eject или использование EAS Build
68. Что такое Expo SDK и какие модули он включает?
Expo SDK — это набор готовых модулей для работы с камерой, геолокацией, звуком, уведомлениями и другими нативными функциями. Обновляется регулярно
69. Как проверить версию Expo SDK в проекте?
Версию можно найти в файле app.json или package.json, в зависимости от конфигурации проекта
70. Что такое Eject и зачем он используется?
Eject — это процесс выхода из managed workflow Expo в bare workflow, чтобы получить полный контроль над нативным кодом
71. Какие инструменты необходимы для работы с bare workflow?
Для работы с bare workflow нужны Xcode (для iOS) и Android Studio (для Android), а также навыки работы с нативными модулями
72. Как использовать нативные модули в React Native?
Нативные модули создаются на Swift/Objective-C (iOS) и Java/Kotlin (Android), затем подключаются к JS-части через мост
73. Что такое native modules и когда они нужны?
Native modules — это нативный код, который можно вызывать из JavaScript. Используются, когда стандартные возможности React Native недостаточны
74. Как тестировать приложения на реальных устройствах?
Приложения можно тестировать через USB-подключение, OTA-обновления или облачные сервисы, такие как Firebase Test Lab
75. Как оптимизировать производительность приложений на React Native?
Оптимизация включает использование PureComponent, React.memo, useMemo, useCallback, правильное управление состоянием, оптимизацию изображений и сетевых запросов
1. Какой язык используется для разработки приложений на React Native?
a) Java
b) JavaScript
c) Python
d) C#
правильный ответ: b
2. Что такое JSX в React Native?
a) Стилевая библиотека
b) Расширение синтаксиса JavaScript для описания интерфейса
c) Пакетный менеджер
d) Асинхронная функция
правильный ответ: b
3. Какой компонент используется для отображения текста?
a) View
b) Text
c) TextInput
d) Button
правильный ответ: b
4. Какой хук используется для работы со состоянием?
a) useEffect
b) useReducer
c) useState
d) useContext
правильный ответ: c
5. Какой компонент используется для создания прокрутки?
a) ScrollView
b) FlatList
c) View
d) Text
правильный ответ: a
6. Какой модуль позволяет работать с размерами экрана?
a) Platform
b) Dimensions
c) PixelRatio
d) AsyncStorage
правильный ответ: b
7. Какой метод навигации добавляет новый экран поверх текущего?
a) push
b) pop
c) navigate
d) goBack
правильный ответ: a
8. Какой тип навигации подходит для нижнего меню?
a) Stack
b) Drawer
c) Tab
d) Modal
правильный ответ: c
9. Какой компонент лучше использовать для больших списков?
a) ScrollView
b) View
c) FlatList
d) Text
правильный ответ: c
10. Какой API используется для управления стилями?
a) StyleSheet
b) StyleObject
c) CSS
d) StyledComponents
правильный ответ: a
11. Какой модуль Expo используется для получения геолокации?
a) Location
b) Camera
c) FileSystem
d) Notifications
правильный ответ: a
12. Какой метод используется для сохранения данных в AsyncStorage?
a) getItem
b) setItem
c) deleteItem
d) clear
правильный ответ: b
13. Какой хук используется для эффектов и подписок?
a) useState
b) useEffect
c) useNavigation
d) useMemo
правильный ответ: b
14. Какой файл используется для настройки проекта Expo?
a) package.json
b) app.json
c) index.js
d) App.js
правильный ответ: b
15. Какой формат данных чаще всего используется при работе с API?
a) XML
b) JSON
c) HTML
d) YAML
правильный ответ: b
16. Какой компонент используется для отображения изображений?
a) Image
b) Video
c) Text
d) View
правильный ответ: a
17. Какой инструмент позволяет выполнять запросы к серверу?
a) fetch
b) console
c) alert
d) require
правильный ответ: a
18. Какой параметр передается для уникальной идентификации элементов списка?
a) id
b) key
c) index
d) value
правильный ответ: b
19. Какой компонент используется для отображения диалоговых окон?
a) Alert
b) Modal
c) Snackbar
d) Toast
правильный ответ: b
20. Какой пакет предоставляет Redux в React Native?
a) react-redux
b) redux-react
c) native-redux
d) react-native-redux
правильный ответ: a
21. Какой сервис Expo используется для облачной сборки?
a) EAS Build
b) Expo CLI
c) Expo Go
d) SDK
правильный ответ: a
22. Какой модуль используется для работы с клавиатурой?
a) KeyboardAvoidingView
b) KeyboardAwareScrollView
c) InputAccessoryView
d) KeyboardManager
правильный ответ: a
23. Какой метод у Navigation позволяет вернуться назад?
a) back
b) pop
c) goBack
d) previous
правильный ответ: c
24. Какой компонент используется для отображения индикатора загрузки?
a) Progress
b) Loader
c) ActivityIndicator
d) Spinner
правильный ответ: c
25. Какой подход используется для передачи данных между компонентами без props?
a) Context API
b) Props drilling
c) Local storage
d) Global state
правильный ответ: a
26. Какой метод вызывается при монтировании компонента в классовых компонентах?
a) componentDidMount
b) componentWillMount
c) componentWillUnmount
d) componentDidUpdate
правильный ответ: a
27. Какой компонент используется для отображения строки состояния устройства?
a) StatusBar
b) Header
c) NavigationBar
d) InfoBar
правильный ответ: a
28. Какой способ позволяет определить, какая платформа используется?
a) Platform.OS
b) Device.platform
c) SystemInfo.os
d) OS.get()
правильный ответ: a
29. Какой тип файла используется для платформенно-зависимого кода в iOS?
a) .ios.js
b) .android.js
c) .native.js
d) .js
правильный ответ: a
30. Какой тип файла используется для платформенно-зависимого кода в Android?
a) .ios.js
b) .android.js
c) .native.js
d) .js
правильный ответ: b
31. Какой командой можно запустить проект через Expo CLI?
a) npm run start
b) expo start
c) react-native run
d) yarn start
правильный ответ: b
32. Какой командой создаётся новый проект Expo?
a) expo new
b) expo init
c) expo create
d) expo project
правильный ответ: b
33. Какой компонент используется для обёртки кнопок с анимацией?
a) TouchableHighlight
b) TouchableOpacity
c) Button
d) все вышеперечисленные
правильный ответ: d
34. Какой API используется для доступа к камере?
a) Expo.Camera
b) Expo.Location
c) Expo.ImagePicker
d) Expo.FileSystem
правильный ответ: a
35. Какой метод используется для получения данных из AsyncStorage?
a) setItem
b) getItem
c) removeItem
d) getAllItems
правильный ответ: b
36. Какой модуль Expo используется для отправки уведомлений?
a) PushNotifications
b) Notifications
c) Messaging
d) Alerts
правильный ответ: b
37. Какой тип навигации позволяет открывать боковое меню?
a) Stack
b) Drawer
c) Tab
d) Modal
правильный ответ: b
38. Какой метод жизненного цикла вызывается при обновлении состояния?
a) componentWillReceiveProps
b) shouldComponentUpdate
c) componentDidUpdate
d) componentWillUpdate
правильный ответ: c
39. Какой компонент является аналогом div в React Native?
a) Text
b) View
c) Image
d) ScrollView
правильный ответ: b
40. Какой хук используется для создания ссылок на DOM-элементы?
a) useRef
b) useState
c) useEffect
d) useCallback
правильный ответ: a
41. Какой пакет используется для работы с маршрутизацией?
a) react-router
b) react-navigation
c) navigation
d) router
правильный ответ: b
42. Какой метод используется для перезапуска приложения при изменении кода?
a) Hot Reloading
b) Live Reload
c) Fast Refresh
d) Reload App
правильный ответ: b
43. Какой метод позволяет обновлять UI без перезапуска?
a) Hot Reloading
b) Live Reload
c) Fast Refresh
d) Update UI
правильный ответ: a
44. Какой файл содержит основную логику приложения?
a) App.js
b) index.js
c) main.js
d) app.js
правильный ответ: a
45. Какой тип компонента не имеет собственного состояния по умолчанию?
a) Функциональный
b) Классовый
c) Оба типа имеют состояние
d) Нет правильного ответа
правильный ответ: a
46. Какой пакет используется для работы с SQLite?
a) expo-sqlite
b) sqlite
c) react-native-sqlite-storage
d) все вышеперечисленные
правильный ответ: d
47. Какой модуль Expo используется для выбора изображений?
a) ImagePicker
b) Camera
c) Gallery
d) MediaPicker
правильный ответ: a
48. Какой стиль применяется к компонентам в React Native?
a) CSS
b) JS объекты
c) Inline HTML
d) SCSS
правильный ответ: b
49. Какое свойство используется для изменения направления flex-контейнера?
a) flexDirection
b) direction
c) layout
d) flow
правильный ответ: a
50. Какой метод вызывается при демонтировании компонента?
a) componentWillUnmount
b) componentDidUnmount
c) componentWillUnmount
d) componentDidRemove
правильный ответ: a
51. Какой метод используется для обновления состояния в React?
a) setState
b) updateState
c) changeState
d) replaceState
правильный ответ: a
52. Какой хук используется для мемоизации значений?
a) useMemo
b) useCallback
c) useRef
d) useEffect
правильный ответ: a
53. Какой хук используется для мемоизации функций?
a) useMemo
b) useCallback
c) useRef
d) useEffect
правильный ответ: b
54. Какой пакет используется для создания тем?
a) styled-components
b) react-native-paper
c) context + custom hooks
d) все вышеперечисленные
правильный ответ: d
55. Какой компонент используется для отображения полноэкранного контента?
a) Modal
b) FullScreen
c) Overlay
d) Dialog
правильный ответ: a
56. Какой метод используется для отслеживания изменений в состоянии?
a) subscribe
b) watch
c) observe
d) listen
правильный ответ: a
57. Какой модуль Expo используется для работы с файлами?
a) FileSystem
b) FileStorage
c) DocumentPicker
d) Storage
правильный ответ: a
58. Какой метод используется для очистки данных в AsyncStorage?
a) clear
b) reset
c) flush
d) clean
правильный ответ: a
59. Какой пакет используется для тестирования?
a) Jest
b) Mocha
c) Enzyme
d) все вышеперечисленные
правильный ответ: d
60. Какой пакет используется для работы с датами?
a) moment
b) date-fns
c) luxon
d) все вышеперечисленные
правильный ответ: d
61. Какой метод используется для создания пользовательских хуков?
a) createHook
b) defineHook
c) function use...
d) hook.use...
правильный ответ: c
62. Какой компонент используется для отображения прогресса?
a) ProgressBar
b) ProgressCircle
c) ActivityIndicator
d) LoadingBar
правильный ответ: c
63. Какой модуль Expo используется для работы с токенами уведомлений?
a) Notifications.getDevicePushTokenAsync()
b) PushNotifications.getToken()
c) Messaging.getToken()
d) Device.getPushToken()
правильный ответ: a
64. Какой тип проверки типов используется в React Native?
a) PropTypes
b) TypeScript
c) Flow
d) все вышеперечисленные
правильный ответ: d
65. Какой пакет используется для HTTP-запросов?
a) axios
b) fetch
c) request
d) все вышеперечисленные
правильный ответ: d
66. Какой метод используется для обновления состояния в Redux?
a) dispatch
b) sendAction
c) updateStore
d) emit
правильный ответ: a
67. Какой файл используется для настройки релиза в Expo?
a) eas.json
b) app.json
c) release.config
d) build.json
правильный ответ: a
68. Какой тип хранилища данных используется в Redux?
a) Centralized Store
b) Distributed Store
c) Component State
d) LocalStorage
правильный ответ: a
69. Какой метод используется для отладки в React Native?
a) Debug JS Remotely
b) Chrome DevTools
c) React Developer Tools
d) все вышеперечисленные
правильный ответ: d
70. Какой пакет используется для работы с формами?
a) Formik
b) react-hook-form
c) redux-form
d) все вышеперечисленные
правильный ответ: d
71. Какой пакет используется для локализации?
a) i18n-js
b) react-i18next
c) localizedStrings
d) все вышеперечисленные
правильный ответ: d
72. Какой тип стилизации используется в большинстве случаев?
a) Inline
b) StyleSheet.create
c) CSS-in-JS
d) Все вышеперечисленные
правильный ответ: d
73. Какой метод используется для открытия ссылок внутри приложения?
a) Linking.openURL
b) WebBrowser.openBrowserAsync
c) InAppBrowser.open
d) все вышеперечисленные
правильный ответ: d
74. Какой модуль Expo используется для сканирования QR-кодов?
a) BarCodeScanner
b) QRCodeReader
c) Scanner
d) CodeScanner
правильный ответ: a
75. Какой метод используется для работы с локальными уведомлениями?
a) scheduleNotificationAsync
b) localNotification
c) triggerNotification
d) showLocalNotification
правильный ответ: a
Билет №1
Теоретическая часть
1. Опишите, что такое React Native и как он обеспечивает кроссплатформенность
2. В чём разница между функциональными и классовыми компонентами?
Ответы на теоретические вопросы:
1. React Native — это фреймворк для разработки мобильных приложений с использованием JavaScript. Он позволяет писать код один раз и запускать его на iOS и Android за счёт использования нативных компонентов и моста между JS-движком и нативным кодом
2. Функциональные компоненты — это простые функции, возвращающие JSX. Они работают с состоянием через хуки. Классовые компоненты — это ES6-классы, наследующие от React.Component, и используют методы жизненного цикла и внутреннее состояние через this.state
Практическая часть
Создайте простой компонент ButtonWithText, который принимает текст и вызывает функцию onPress при нажатии. Реализуйте стилизацию кнопки и текста внутри неё
import React from 'react';
import { View, Text, TouchableOpacity, StyleSheet } from 'react-native';
const ButtonWithText = ({ text, onPress }) => {
return (
<TouchableOpacity style={styles.button} onPress={onPress}>
<Text style={styles.text}>{text}</Text>
</TouchableOpacity>
);
};
const styles = StyleSheet.create({
button: {
backgroundColor: '#007BFF',
padding: 15,
borderRadius: 8,
alignItems: 'center',
},
text: {
color: '#FFFFFF',
fontSize: 16,
},
});
export default ButtonWithText;
Билет №2
Теоретическая часть
1. Что такое props и state и в чём их основное отличие?
2. Как работает система навигации в React Navigation?
Ответы на теоретические вопросы:
1. Props — это данные, передаваемые из родительского компонента в дочерний. State — это внутреннее состояние компонента, изменяемое со временем и влияющее на его рендеринг. Props неизменны внутри компонента, а state управляется самим компонентом
2. React Navigation использует навигаторы (Stack, Tab, Drawer) для управления переходами между экранами. Экраны добавляются в стек или организуются по типу вкладок или бокового меню. Навигация осуществляется через метод navigate() или push(), pop()
Практическая часть
Реализуйте простую стековую навигацию между двумя экранами: HomeScreen и DetailsScreen. На первом экране должна быть кнопка, которая переходит на второй экран
import React from 'react';
import { View, Text, Button } from 'react-native';
import { NavigationContainer } from '@react-navigation/native';
import { createNativeStackNavigator } from '@react-navigation/native-stack';
const Stack = createNativeStackNavigator();
const HomeScreen = ({ navigation }) => {
return (
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<Text>Главная страница</Text>
<Button title="Перейти к деталям" onPress={() => navigation.navigate('Details')} />
</View>
);
};
const DetailsScreen = () => {
return (
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<Text>Страница с деталями</Text>
</View>
);
};
const App = () => {
return (
<NavigationContainer>
<Stack.Navigator initialRouteName="Home">
<Stack.Screen name="Home" component={HomeScreen} />
<Stack.Screen name="Details" component={DetailsScreen} />
</Stack.Navigator>
</NavigationContainer>
);
};
export default App;
Билет №3
Теоретическая часть
1. Объясните, что такое хук useEffect и когда он используется
2. Как работают Flexbox-стили в React Native?
Ответы на теоретические вопросы:
1. useEffect — это хук, позволяющий выполнять побочные эффекты в функциональных компонентах. Используется для загрузки данных, подписки на события или прямого взаимодействия с API или нативными модулями. Выполняется после рендеринга компонента
2. Flexbox в React Native определяет расположение элементов внутри контейнера. Основные свойства: flexDirection (направление), justifyContent (выравнивание по главной оси), alignItems (выравнивание по поперечной оси). Позволяет создавать адаптивные макеты
Практическая часть
Создайте экран с двумя блоками, расположенными горизонтально по краям контейнера, и третий — по центру
import React from 'react';
import { View, Text, StyleSheet } from 'react-native';
const FlexExample = () => {
return (
<View style={styles.container}>
<View style={styles.box}><Text>Лево</Text></View>
<View style={styles.box}><Text>Центр</Text></View>
<View style={styles.box}><Text>Право</Text></View>
</View>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
flexDirection: 'row',
justifyContent: 'space-between',
alignItems: 'center',
padding: 20,
},
box: {
width: 100,
height: 100,
backgroundColor: '#DDDDDD',
justifyContent: 'center',
alignItems: 'center',
},
});
export default FlexExample;
Билет №4
Теоретическая часть
1. Что такое AsyncStorage и как он используется в React Native?
2. Как реализовать передачу параметров между экранами в React Navigation?
Ответы на теоретические вопросы:
1. AsyncStorage — это асинхронное хранилище пар ключ-значение. Используется для сохранения небольших объёмов данных локально, таких как токены авторизации или пользовательские настройки. Поддерживает методы setItem(), getItem(), removeItem()
2. Параметры передаются через объект params при вызове navigate(). Пример: navigation.navigate('Details', { id: 123 }). На целевом экране доступ к параметрам получают через route.params
Практическая часть
Сохраните строку "username" в AsyncStorage и выведите её в консоль
import React, { useEffect } from 'react';
import { View, Text } from 'react-native';
import AsyncStorage from '@react-native-async-storage/async-storage';
const StorageExample = () => {
useEffect(() => {
const saveData = async () => {
await AsyncStorage.setItem('username', 'john_doe');
const storedValue = await AsyncStorage.getItem('username');
console.log(storedValue);
};
saveData();
}, []);
return (
<View>
<Text>Данные сохранены и выведены в консоль</Text>
</View>
);
};
export default StorageExample;
Билет №5
Теоретическая часть
1. Что такое Redux и зачем он нужен в React Native?
2. В чём отличие ScrollView от FlatList?
Ответы на теоретические вопросы:
1. Redux — это библиотека управления состоянием. Используется для централизованного хранения и обновления состояния приложения. Состоит из store, actions и reducers. Полезен в крупных приложениях с множеством компонентов
2. ScrollView загружает все элементы сразу, что может замедлить производительность. FlatList рендерит только видимые на экране элементы, что делает его более эффективным для больших списков
Практическая часть
Создайте список с помощью FlatList, который отображает массив чисел от 1 до 10
import React from 'react';
import { View, FlatList, Text, StyleSheet } from 'react-native';
const NumberList = () => {
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const renderItem = ({ item }) => (
<View style={styles.item}>
<Text>{item}</Text>
</View>
);
return (
<FlatList
data={numbers}
renderItem={renderItem}
keyExtractor={item => item.toString()}
/>
);
};
const styles = StyleSheet.create({
item: {
padding: 15,
borderBottomWidth: 1,
borderColor: '#ccc',
},
});
export default NumberList;
Билет №6
Теоретическая часть
1. Как работает система стилизации в React Native?
2. Что такое хук useState и как он используется?
Ответы на теоретические вопросы:
1. Стилизация осуществляется через StyleSheet API или inline-стили. Стили создаются как объекты JavaScript с использованием camelCase для свойств, таких как backgroundColor. Поддерживает Flexbox для расположения элементов
2. useState — это хук, который позволяет добавлять реактивное состояние в функциональные компоненты. Он возвращает массив из текущего значения состояния и функции для его обновления
Практическая часть
Создайте кнопку, при нажатии на которую увеличивается значение счетчика и отображается новое значение
import React, { useState } from 'react';
import { View, Text, Button, StyleSheet } from 'react-native';
const Counter = () => {
const [count, setCount] = useState(0);
return (
<View style={styles.container}>
<Text>Счетчик: {count}</Text>
<Button title="Увеличить" onPress={() => setCount(count + 1)} />
</View>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
},
});
export default Counter;
Билет №7
Теоретическая часть
1. Опишите, что представляет собой архитектура Redux
2. Как работают хуки useMemo и useCallback?
Ответы на теоретические вопросы:
1. Redux следует однонаправленному потоку данных: Action → Reducer → State. Action описывает событие, Reducer изменяет состояние на основе действия, а новое состояние становится доступно всем компонентам
2. useMemo мемоизирует вычисляемые значения, чтобы избежать повторных дорогостоящих вычислений. useCallback мемоизирует функции, чтобы предотвратить их повторное создание при каждом рендере
Практическая часть
Создайте форму с двумя полями ввода (имя и возраст) и кнопкой. При нажатии выводите данные в консоль
import React, { useState } from 'react';
import { View, TextInput, Button, StyleSheet } from 'react-native';
const UserForm = () => {
const [name, setName] = useState('');
const [age, setAge] = useState('');
const handleSubmit = () => {
console.log(`Имя: ${name}, Возраст: ${age}`);
};
return (
<View style={styles.container}>
<TextInput
placeholder="Введите имя"
value={name}
onChangeText={setName}
style={styles.input}
/>
<TextInput
placeholder="Введите возраст"
value={age}
onChangeText={setAge}
keyboardType="numeric"
style={styles.input}
/>
<Button title="Отправить" onPress={handleSubmit} />
</View>
);
};
const styles = StyleSheet.create({
container: {
padding: 20,
},
input: {
borderBottomWidth: 1,
marginBottom: 15,
padding: 8,
},
});
export default UserForm;
Билет №8
Теоретическая часть
1. Что такое Expo и какие преимущества он даёт?
2. В чём разница между managed и bare workflow в React Native?
Ответы на теоретические вопросы:
1. Expo — это платформа и SDK, упрощающая разработку на React Native. Преимущества: готовые модули, Live Reload, отладка без сборки, поддержка множества устройств
2. Managed workflow предоставляет абстракцию над нативным кодом и удобство работы с Expo Go. Bare workflow требует самостоятельной настройки нативного кода и больше контроля над проектом
Практическая часть
Реализуйте экран с Modal, который открывается по кнопке и содержит текстовое сообщение
import React, { useState } from 'react';
import { View, Text, Button, Modal, StyleSheet } from 'react-native';
const ModalExample = () => {
const [isVisible, setIsVisible] = useState(false);
return (
<View style={styles.container}>
<Button title="Показать модальное окно" onPress={() => setIsVisible(true)} />
<Modal visible={isVisible} animationType="slide" transparent={false}>
<View style={styles.modalContainer}>
<Text>Это модальное окно</Text>
<Button title="Закрыть" onPress={() => setIsVisible(false)} />
</View>
</Modal>
</View>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
padding: 20,
},
modalContainer: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
padding: 20,
},
});
export default ModalExample;
Билет №9
Теоретическая часть
1. Какие основные методы жизненного цикла есть у классовых компонентов?
2. Что такое Context API и когда его стоит использовать?
Ответы на теоретические вопросы:
1. componentDidMount вызывается после монтирования, componentDidUpdate — после обновления, componentWillUnmount — перед удалением. Эти методы позволяют выполнять побочные эффекты
2. Context API — это механизм передачи данных глубоко вложенным компонентам без прокидывания props. Используется для тем оформления, языковых настроек и других общих данных
Практическая часть
Создайте простой провайдер темы (light/dark), который меняет цвет фона и текста на экране
import React, { createContext, useState, useContext } from 'react';
import { View, Text, Button, StyleSheet } from 'react-native';
const ThemeContext = createContext();
const ThemeProvider = ({ children }) => {
const [darkMode, setDarkMode] = useState(false);
const toggleTheme = () => setDarkMode(!darkMode);
const theme = darkMode ? dark : light;
return (
<ThemeContext.Provider value={{ theme, toggleTheme }}>
{children}
</ThemeContext.Provider>
);
};
const AppContent = () => {
const { theme, toggleTheme } = useContext(ThemeContext);
return (
<View style={[styles.container, { backgroundColor: theme.background }]}>
<Text style={{ color: theme.text }}>Текущая тема: {theme.name}</Text>
<Button title="Переключить тему" onPress={toggleTheme} />
</View>
);
};
const App = () => {
return (
<ThemeProvider>
<AppContent />
</ThemeProvider>
);
};
const light = {
name: 'Светлая',
background: '#FFFFFF',
text: '#000000',
};
const dark = {
name: 'Темная',
background: '#121212',
text: '#FFFFFF',
};
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
padding: 20,
},
});
export default App;
Билет №10
Теоретическая часть
1. Что такое EAS Build и зачем он нужен?
2. Как проверить, на какой платформе запущено приложение?
Ответы на теоретические вопросы:
1. EAS Build — это облачная система сборки приложений Expo. Позволяет собирать APK/IPA файлы без локальной настройки Xcode или Android Studio
2. Для определения платформы используется модуль Platform из React Native. Метод Platform.OS возвращает 'ios' или 'android'
Практическая часть
Создайте экран, который отображает разный текст в зависимости от платформы
import React from 'react';
import { View, Text, Platform, StyleSheet } from 'react-native';
const PlatformInfo = () => {
const platformName = Platform.OS === 'ios' ? 'iOS' : 'Android';
return (
<View style={styles.container}>
<Text>Вы используете: {platformName}</Text>
</View>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
},
});
export default PlatformInfo;
Билет №11
Теоретическая часть
1. Что такое StatusBar и как им управлять?
2. Как работает fetch в React Native?
Ответы на теоретические вопросы:
1. StatusBar — это компонент, позволяющий управлять строкой состояния устройства. Можно менять цвет текста, фон, скрывать или показывать
2. Fetch API используется для выполнения HTTP-запросов. Поддерживает GET, POST и другие методы. Возвращает Promise, который можно обработать через async/await или .then()
Практическая часть
Выполните GET-запрос к https://jsonplaceholder.typicode.com/posts и выведите заголовки первых трёх постов
import React, { useEffect, useState } from 'react';
import { View, Text, StyleSheet } from 'react-native';
const PostFetcher = () => {
const [posts, setPosts] = useState([]);
useEffect(() => {
fetch('https://jsonplaceholder.typicode.com/posts')
.then(response => response.json())
.then(data => setPosts(data.slice(0, 3)));
}, []);
return (
<View style={styles.container}>
{posts.map(post => (
<Text key={post.id}>{post.title}</Text>
))}
</View>
);
};
const styles = StyleSheet.create({
container: {
padding: 20,
},
});
export default PostFetcher;
Билет №12
Теоретическая часть
1. Что такое PixelRatio и зачем он используется?
2. Как использовать нативные модули в React Native?
Ответы на теоретические вопросы:
1. PixelRatio — это API, позволяющий определить плотность пикселей на экране. Используется для корректного отображения размеров и изображений на разных устройствах
2. Нативные модули создаются на Swift/Objective-C (iOS) и Java/Kotlin (Android), затем подключаются к JS-части через мост. Требуют eject или использование EAS Build
Практическая часть
Создайте компонент, который отображает размер экрана устройства
import React from 'react';
import { View, Text, Dimensions, StyleSheet } from 'react-native';
const ScreenSize = () => {
const { width, height } = Dimensions.get('window');
return (
<View style={styles.container}>
<Text>Ширина экрана: {width}</Text>
<Text>Высота экрана: {height}</Text>
</View>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
padding: 20,
},
});
export default ScreenSize;
Билет №13
Теоретическая часть
1. Что такое Expo Camera и как он используется?
2. Как происходит отладка в React Native?
Ответы на теоретические вопросы:
1. Expo Camera — это модуль, предоставляющий доступ к камере устройства. Позволяет делать фото, записывать видео и сканировать QR-коды
2. Отладка возможна через DevTools в Metro Bundler, Chrome Debugger, React Developer Tools, а также с помощью console.log и Alert
Практическая часть
Создайте компонент, который выводит alert с сообщением "Привет, мир!" при загрузке экрана
import React, { useEffect } from 'react';
import { View } from 'react-native';
const GreetingAlert = () => {
useEffect(() => {
alert('Привет, мир!');
}, []);
return <View />;
};
export default GreetingAlert;
Билет №14
Теоретическая часть
1. Что такое SQLite и как он используется в React Native?
2. Как проверить версию Expo SDK в проекте?
Ответы на теоретические вопросы:
1. SQLite — это легковесная встраиваемая система управления базами данных. В React Native её можно использовать через сторонние библиотеки для хранения структурированных данных локально
2. Версию Expo SDK можно найти в файле app.json или package.json, в зависимости от конфигурации проекта
Практическая часть
Создайте простую таблицу в SQLite и добавьте одну запись
import React, { useEffect } from 'react';
import * as SQLite from 'expo-sqlite';
const db = SQLite.openDatabase('db.db');
const SQLiteExample = () => {
useEffect(() => {
db.transaction(tx => {
tx.executeSql(
'CREATE TABLE IF NOT EXISTS items (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT);'
);
tx.executeSql('INSERT INTO items (name) VALUES (?)', ['Тестовая запись']);
tx.executeSql('SELECT * FROM items', [], (_, { rows }) => {
console.log(rows._array);
});
});
}, []);
return null;
};
export default SQLiteExample;
Билет №15
Теоретическая часть
1. Что такое Eject и зачем он используется?
2. Как тестировать приложения на реальных устройствах?
Ответы на теоретические вопросы:
1. Eject — это процесс выхода из managed workflow Expo в bare workflow, чтобы получить полный контроль над нативным кодом
2. Приложения можно тестировать через USB-подключение, OTA-обновления или облачные сервисы, такие как Firebase Test Lab
Практическая часть
Создайте экран с ActivityIndicator, который исчезает через 3 секунды
import React, { useState, useEffect } from 'react';
import { View, ActivityIndicator, StyleSheet } from 'react-native';
const LoaderScreen = () => {
const [loading, setLoading] = useState(true);
useEffect(() => {
setTimeout(() => {
setLoading(false);
}, 3000);
}, []);
return (
<View style={styles.container}>
{loading ? <ActivityIndicator size="large" /> : <Text>Загрузка завершена</Text>}
</View>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
},
});
export default LoaderScreen;
Кейс 1
Описание ситуации:
Разработчик только начинает осваивать React Native и решил создать простое приложение-список задач (To-Do List). Приложение должно позволять добавлять, удалять и отмечать задачи как выполненные. Разработка ведётся с использованием Expo и функциональных компонентов с хуками. Однако после реализации базового функционала пользователь столкнулся с проблемой: при удалении задачи из списка интерфейс не обновляется мгновенно — приходится перезапускать приложение, чтобы изменения отобразились корректно.
Проблемы, которые нужно выявить:
1. Возможно, состояние списка задач хранится не в правильной области или не обновляется должным образом
2. Могло быть нарушено правило иммутабельности при работе с массивом задач
3. Не исключено, что для ключей (key) в списке используется индекс вместо уникального идентификатора
Возможные решения:
1. Проверить, правильно ли обновляется состояние с помощью useState. Убедиться, что при удалении элемента создаётся новый массив, а не мутируется существующий
2. Использовать метод filter() для создания нового массива без удаляемого элемента
3. Присвоить каждому элементу списка уникальный key, например, на основе id задачи, а не индекса массива
4. Добавить логирование текущего состояния после удаления, чтобы убедиться, что оно действительно меняется
Пример исправленного кода:
import React, { useState } from 'react';
import { View, Text, Button, FlatList, StyleSheet } from 'react-native';
const TodoApp = () => {
const [tasks, setTasks] = useState([
{ id: '1', text: 'Задача 1', completed: false },
{ id: '2', text: 'Задача 2', completed: false },
]);
const deleteTask = (id) => {
setTasks(prevTasks => prevTasks.filter(task => task.id !== id));
};
const renderItem = ({ item }) => (
<View style={styles.taskItem}>
<Text>{item.text}</Text>
<Button title="Удалить" onPress={() => deleteTask(item.id)} />
</View>
);
return (
<FlatList
data={tasks}
renderItem={renderItem}
keyExtractor={item => item.id}
/>
);
};
const styles = StyleSheet.create({
taskItem: {
flexDirection: 'row',
justifyContent: 'space-between',
padding: 15,
borderBottomWidth: 1,
borderColor: '#ccc'
}
});
export default TodoApp;
Кейс 2
Описание ситуации:
Команда разработчиков получила задание реализовать экран с навигацией между тремя вкладками: "Главная", "Настройки", "Профиль". Для реализации был выбран Tab.Navigator из библиотеки React Navigation. После запуска приложения всё работало корректно на эмуляторе Android, но на iOS возникли проблемы: текст на вкладках отображается некорректно, кнопки управления неактивны, а переход между экранами работает медленно и с задержкой.
Проблемы, которые нужно выявить:
1. Возможна неправильная конфигурация навигатора под разные платформы
2. Могли быть использованы нативные компоненты, поведение которых отличается на iOS и Android
3. Не исключено, что стили были заданы некорректно, что привело к отступам или перекрытию контента
4. Возможно, не использовались оптимизированные подходы для рендеринга экранов
Возможные решения:
1. Проверить тип используемого Tab.Navigator — на iOS лучше использовать createBottomTabNavigator, так как он основан на нативном UITabBarController
2. Убедиться, что все компоненты поддерживают cross-platform поведение, особенно если используются сторонние библиотеки
3. Добавить явное управление цветами, шрифтами и размерами через StyleSheet, а не inline-стили
4. Использовать lazy loading для экранов, чтобы уменьшить начальную загрузку и повысить производительность
Пример исправленного кода:
import React from 'react';
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
import { NavigationContainer } from '@react-navigation/native';
import HomeScreen from './screens/HomeScreen';
import SettingsScreen from './screens/SettingsScreen';
import ProfileScreen from './screens/ProfileScreen';
const Tab = createBottomTabNavigator();
const AppNavigator = () => {
return (
<NavigationContainer>
<Tab.Navigator
screenOptions={({ route }) => ({
tabBarActiveTintColor: '#007AFF',
tabBarInactiveTintColor: 'gray',
headerShown: false,
})}
lazy={true}
>
<Tab.Screen name="Главная" component={HomeScreen} />
<Tab.Screen name="Настройки" component={SettingsScreen} />
<Tab.Screen name="Профиль" component={ProfileScreen} />
</Tab.Navigator>
</NavigationContainer>
);
};
export default AppNavigator;
Дополнительно можно проверить:
- Версию React Navigation и зависимостей — они должны быть совместимы с текущей версией React Native
- Наличие установленных нативных модулей для iOS, особенно если используются кастомные стили или анимации
- Корректность работы Metro Bundler и отсутствие ошибок в консоли при запуске на iOS
Ролевая игра №1
цель игры:
научить студентов работать в условиях ограниченного времени, принимать решения по структуре приложения и распределять задачи в команде при разработке мобильного приложения на react native
формат:
командная ролевая игра с элементами таймера. участники объединяются в группы по 4–5 человек. каждый участник получает роль из it-команды. им даётся задание спроектировать архитектуру и реализовать mvp (минимально жизнеспособный продукт) простого мобильного приложения за ограниченное время (например, 2 академических часа)
сеттинг:
виртуальная it-стартап-компания, которая получила заказ от клиента — создать прототип мобильного приложения для управления списками дел
роли в команде:
- product owner — определяет функционал и приоритеты
- frontend developer — занимается реализацией интерфейса и навигации
- backend developer — эмулирует работу api или использует mock-данные
- qa engineer — проверяет корректность работы приложения и сообщает об ошибках
- team lead — координирует действия команды и контролирует сроки
этапы игры:
1. презентация задания и выдача роли каждому участнику
2. планирование архитектуры и распределение задач (15 минут)
3. реализация функционала (60 минут)
4. тестирование и демонстрация результата (15 минут)
обучающие эффекты:
- развитие soft skills (коммуникация, работа в команде)
- освоение принципов agile и time-boxed разработки
- применение знаний по навигации, состоянию, работе с api и ui в реальных условиях
возможные проблемы и вызовы во время игры:
- неправильное распределение задач
- недостаточное понимание архитектурных решений
- технические сложности при интеграции компонентов
- нехватка времени из-за некорректной оценки задач
Ролевая игра №2
цель игры:
развить у студентов навыки анализа ошибок, диагностики проблем в коде и поиска путей их решения при разработке на react native
формат:
групповая игра, где каждой команде из 3–4 человек выдаётся фрагмент "сломанного" кода мобильного приложения. необходимо найти как можно больше ошибок и предложить исправления
сеттинг:
внутренняя it-компания получает жалобы пользователей на некорректную работу мобильного приложения. группа разработчиков должна провести расследование и устранить баги
роли в команде:
- senior developer — руководит процессом поиска ошибок
- junior developer — предлагает возможные варианты исправлений
- tester — воспроизводит условия возникновения ошибок
- technical writer — документирует найденные проблемы и пути их решения
этапы игры:
1. знакомство с кодом и описанием проблемы
2. анализ кода и выявление синтаксических, логических и производительностных ошибок
3. предложение исправлений и обсуждение альтернатив
4. защита своего решения перед преподавателем или другой командой
обучающие эффекты:
- развитие критического мышления и внимательности к деталям
- практика чтения чужого кода и понимания логики приложений
- закрепление знаний по основам js, jsx, стилизации и управлению состоянием
возможные проблемы и вызовы во время игры:
- сложно обнаружить скрытые логические ошибки
- могут возникнуть разногласия в команде относительно правильного решения
- участники могут упустить важные моменты, влияющие на производительность
Ролевая игра №3
цель игры:
научить студентов грамотно взаимодействовать с заказчиком, собирать требования и предлагать техническое решение, соответствующее бизнес-задаче
формат:
интерактивная ролевая игра, где часть студентов играет роль заказчика, а другая — роль разработчиков. команда разработчиков должна получить ТЗ, задать уточняющие вопросы и предложить техническое решение
сеттинг:
it-студия получает запрос от малого бизнеса — создать мобильное приложение для отслеживания заказов клиентов
роли в команде:
- заказчик — представляет бизнес и описывает потребности
- менеджер проекта — собирает требования и координирует разработку
- ux/ui-дизайнер — создаёт макет экранов (можно в голове или на бумаге)
- разработчики — предлагают техническое решение и реализуют его
- qa-специалист — проверяет соответствие решения требованиям
этапы игры:
1. встреча с заказчиком и сбор требований
2. уточнение условий и ограничений
3. проектирование базовой архитектуры приложения
4. демонстрация концепта и получение обратной связи
обучающие эффекты:
- развитие soft skills и навыков коммуникации
- понимание процесса превращения бизнес-задачи в техническое решение
- закрепление знаний по созданию MVP и организации ui/ux
возможные проблемы и вызовы во время игры:
- заказчик может давать расплывчатые или противоречивые требования
- разработчики могут переоценивать возможности или недооценивать сложность
- команды могут столкнуться с трудностями в согласовании точек зрения
Ролевая игра №4
цель игры:
дать студентам возможность на практике применить знания по кроссплатформенной разработке, особенностям ios и android, а также научить их находить и решать платформенно-зависимые проблемы
формат:
индивидуальная или парная работа, где участники получают задание реализовать один и тот же функционал на разных платформах, затем тестируют его и находят различия в поведении
сеттинг:
разработка мобильного приложения под ios и android. после запуска обнаруживаются отличия в отображении интерфейса, работе с клавиатурой и доступе к системным функциям
роли в команде:
- ios-developer — фокусируется на особенностях поведения приложения на ios
- android-developer — работает с android-устройством
- cross-platform architect — ищет общие решения и абстракции
- tester — проверяет работу на обеих платформах
этапы игры:
1. реализация одного и того же функционала на разных устройствах
2. тестирование и сравнение результатов
3. выявление платформенных особенностей и багов
4. поиск общего решения, учитывающего различия между платформами
обучающие эффекты:
- понимание особенностей кроссплатформенной разработки
- развитие навыков диагностики и решения платформенно-зависимых проблем
- освоение подходов к унификации кода и использованию условий по платформе
возможные проблемы и вызовы во время игры:
- различия в отступах, размерах экрана и плотности пикселей
- разное поведение клавиатуры и модальных окон
- доступ к некоторым функциям может быть ограничен на одной из платформ
Интеллект-карта 1: основы react native
главный узел: кроссплатформенный разработчик react native
подузлы:
- язык программирования
-- javascript (основы, синтаксис, типы данных)
-- typescript (типизация, интерфейсы, generics)
- фундамент react
-- jsx (синтаксис, выражения, вложенные элементы)
-- компоненты (функциональные, классовые)
-- props и state (передача данных, изменение состояния)
-- хуки (useState, useEffect, useContext)
- структура приложения
-- дерево компонентов
-- корневой компонент App
-- организация файлов и папок
- работа с ui
-- встроенные компоненты (view, text, image, button)
-- стилизация (stylesheet, inline-стили, flexbox)
-- списки (scrollview, flatlist, sectionlist)
-- навигация (stack, tab, drawer)
- управление состоянием
-- локальное состояние (useState)
-- глобальное состояние (context api, redux)
- работа с данными
-- локальное хранилище (asyncstorage, sqlite)
-- сетевые запросы (fetch, axios)
-- обработка json
- жизненный цикл разработки
-- настройка среды (expo, bare workflow)
-- эмуляция и тестирование
-- отладка и профилирование
-- сборка и публикация
---
Интеллект-карта 2: этапы обучения по модулям
главный узел: учебная программа "кроссплатформенный разработчик react native"
подузлы:
- подготовка рабочего окружения
-- установка node.js, expo cli
-- создание первого проекта
-- запуск на устройстве или эмуляторе
-- понимание структуры проекта
- основы javascript и typescript
-- переменные, функции, объекты, массивы
-- стрелочные функции, деструктуризация
-- типы, интерфейсы, enum
-- async/await, promise, try/catch
- базовая разработка на react
-- jsx и его особенности
-- создание компонентов
-- передача props и управление state
-- использование хуков
- построение пользовательского интерфейса
-- использование встроенных компонентов
-- стилизация через stylesheet
-- работа с flexbox и адаптивным дизайном
-- создание списков и форм
- навигация между экранами
-- стековая, табличная и боковая навигация
-- передача параметров
-- настройка заголовков и кнопок
-- переходы и анимации
- работа с данными
-- локальное хранение (asyncstorage)
-- доступ к внешним api (rest, fetch)
-- обработка ошибок и загрузки
-- сериализация и десериализация json
- управление состоянием
-- context api для передачи данных
-- redux и редьюсеры
-- подключение к компонентам
-- middleware и асинхронные действия
- публикация и продвижение
-- подготовка к выпуску
-- сборка apk/ipa
-- описание приложения и иконки
-- публикация в google play и app store
---
Интеллект-карта 3: ключевые технологии и инструменты
главный узел: технологии и экосистема react native
подузлы:
- react
-- jsx
-- компоненты
-- хуки
-- контекст
- react native
-- встроенные модули (platform, dimensions, alert)
-- нативные компоненты
-- мост между js и нативом
- expo
-- sdk (camera, location, notifications)
-- eas build и submit
-- expo go
-- файл app.json
- навигация
-- react navigation (stack, tab, drawer)
-- deep linking
-- nested navigators
-- переходы и анимации
- работа с состоянием
-- context api
-- redux
-- redux toolkit
-- mobx (опционально)
- работа с данными
-- fetch
-- axios
-- asyncstorage
-- sqlite
-- realm
- стилизация
-- stylesheet
-- styled-components
-- tailwind-react-native
-- theming
- отладка и тестирование
-- chrome debugger
-- react devtools
-- jest
-- testing library
-- snapshot tests
- публикация
-- android studio
-- xcode
-- google play console
-- app store connect
---
Интеллект-карта 4: карьерный путь и развитие
главный узел: развитие как кроссплатформенного разработчика
подузлы:
- профессиональный рост
-- junior developer
--- знание jsx, компонентов
--- понимание жизненного цикла
--- базовое владение навигацией
-- middle developer
--- опыт работы с состоянием
--- понимание архитектурных подходов
--- написание чистого кода
-- senior developer
--- проектирование архитектуры
--- code review
--- наставничество
- дополнительные навыки
-- git и github
-- agile и scrum
-- unit-тестирование
-- документирование кода
-- оптимизация производительности
-- безопасность
-- работа с CI/CD
- портфолио
-- open source проекты
-- собственные приложения
-- участие в хакатонах
-- публикации в сторах
- рынок труда
-- фриланс
-- it-стартапы
-- крупные компании
-- удалённая работа
-- собственный продукт
- дальнейшее обучение
-- advanced react native
-- native modules
-- движки (reanimated, gesture handler)
-- низкоуровневая оптимизация
-- изучение kotlin/swift
1. учебник: react native. разработка кроссплатформенных приложений
автор: бони гарсиа
описание: книга охватывает основы react native, включая jsx, компоненты, стилизацию, навигацию и работу с api. содержит практические примеры и проекты для закрепления материала
2. методическое пособие: мобильная разработка на react native. практикум для начинающих
составитель: коллектив авторов (ит-академия)
описание: пошаговое руководство с лабораторными работами, заданиями и проверочными тестами. ориентировано на студентов начального уровня
3. задачник: задачи и упражнения по react native для начинающих разработчиков
автор: иван петров
описание: сборник практических задач по созданию интерфейсов, управлению состоянием, навигации и работе с данными. включает тестовые задания и проекты для портфолио
4. хрестоматия: избранные статьи и материалы по кроссплатформенной разработке
редактор: алексей смоляк
описание: подборка статей из технических блогов, документации и исследований, посвящённых react native и современным практикам разработки
5. научная литература: особенности архитектуры и производительности в react native
автор: дмитрий федотов
описание: исследование построено на анализе производительности приложений, сравнении подходов к управлению состоянием и особенностях моста между js и нативным кодом
1. кроссплатформенный разработчик react native. старт
анонс: освойте основы мобильной разработки на react native с нуля. создавайте приложения для android и ios, используя один код и современные практики
2. реакт нейтив для начинающих: от теории к практике
анонс: курс, который поможет новичкам освоить react native через практические проекты, понятные примеры и пошаговое обучение без предварительных знаний
3. mobile-разработка без границ: первый шаг в it
анонс: научитесь создавать кроссплатформенные приложения, применяя javascript и react native для реализации реальных проектов и развития в сфере it
4. react native за 8 недель: путь junior разработчика
анонс: интенсивный курс для тех, кто хочет за короткое время выйти на уровень junior. практика, проекты, поддержка и готовность к работе
5. разработка мобильных приложений с react native: базовый курс
анонс: углублённое изучение основ react native. интерфейсы, навигация, работа с api, управление состоянием — всё, что нужно знать начинающему разработчику
6. react native с нуля до первого приложения
анонс: пройдите путь от установки expo до запуска собственного приложения. простой формат обучения с фокусом на практику и результат
7. кроссплатформенная мобильная разработка: старт с react native
анонс: освойте создание мобильных приложений под обе платформы сразу. курс для будущих разработчиков, желающих работать эффективно и современно
8. react native для самостоятельного изучения
анонс: структурированный курс для самообучения. видеоуроки, задания, тесты и проекты помогут вам освоить мобильную разработку без преподавателя
9. мобильные приложения на react native: практико-ориентированный курс
анонс: больше практики — меньше теории. создавайте функциональные приложения, учитывая особенности юзабилити, производительности и архитектуры
10. первые шаги в мобильной разработке на react native
анонс: курс для новичков, которые хотят понять, как создаются мобильные приложения и начать карьеру в перспективной области it
11. react native: базис современного мобильного разработчика
анонс: изучите ключевые концепции и подходы, необходимые для создания кроссплатформенных приложений, и заложите прочный фундамент для роста
12. мобильная разработка для web-разработчиков
анонс: если вы уже знакомы с javascript, этот курс поможет вам расширить свои навыки и освоить мобильную разработку с помощью react native
13. react native step by step
анонс: последовательный и понятный путь освоения технологии react native. от установки до первой публикации приложения в магазине
14. react native: курс для начинающих мобильных разработчиков
анонс: изучите основы мобильной разработки с акцентом на реальные задачи и применение в профессиональной среде
15. мобильная разработка для будущего it-специалиста
анонс: научитесь создавать мобильные приложения и получить востребованную специальность, которая открывает двери в удалённую работу и стартапы
16. react native: первый уровень
анонс: первый этап пути в мир мобильной разработки. освойте основы react native, создайте свой первый проект и начните строить карьеру
17. react native. начальный уровень подготовки разработчика
анонс: курс охватывает все ключевые темы для начала работы с react native. идеально подходит для тех, кто только делает первые шаги
18. react native: базовые навыки мобильной разработки
анонс: изучите базовые принципы и практики, необходимые для создания мобильных приложений с использованием react native
19. мобильная разработка с нуля: react native в действии
анонс: курс, построенный на практике. от простого к сложному — вы не просто узнаете, как писать код, но и научитесь это делать правильно
20. react native для всех: доступное обучение мобильной разработке
анонс: нет технического образования? не беда! этот курс поможет вам освоить мобильную разработку даже без опыта
21. react native: быстрый старт в профессию
анонс: научитесь создавать мобильные приложения всего за несколько недель. курс ориентирован на быстрое освоение и выход на рынок труда
22. мобильная разработка на javascript: react native в основе
анонс: изучите, как использовать свои знания javascript в мире мобильной разработки. react native — ваш мост между вебом и мобильными устройствами
23. react native: учебный курс для начинающих программистов
анонс: структурированная программа обучения для тех, кто хочет стать мобильным разработчиком. теория, практика, поддержка и проекты
24. react native: от новичка к первому проекту
анонс: преодолейте порог входа в профессию. вы создадите своё первое приложение и получите опыт, который можно показать в портфолио
25. react native: стартовая площадка для мобильных разработчиков
анонс: курс для тех, кто хочет начать карьеру в мобильной разработке. мы поможем вам сделать первый шаг, освоить технологию и двигаться дальше
Нет элементов для просмотра