ݺߣ

ݺߣShare a Scribd company logo
React Native
Успешный кейс использования
в продакшне
Евгений Федоров
1
Евгений Федоров
и технический директор
Пару слов о себе
/eugene.feudorov
2
Сооснователь
lookbuck.com
Тезисы
• Знакомство с React Native
• Сравним код типичного экрана с TableView 

Objective-C vs React Native
• Реализуем часть приложения на примере LOOKBUCK
• Поддержка приложения, дебаггинг, tools, тестирование
• Возможности и ограничения
• Бонус. При написании приложения для iOS — 

80% Android приложения в подарок
3
• Полностью нативные (objective-c, swift, java)
• Условно нативные / кроссплатформенные
(React Native, Xamarin, RubyMotion, etc.)
• Web View (PhoneGap, Ionic, etc.)
💩
Мобильная разработка
4
Learn once, write anywhere
5
React Native
Первый запуск
6
$ react-native init BigApp
$ react-native run-ios
$ react-native run-android
Инициализация проекта:
Структура стартового 

проекта React Native:
Запуск приложения :
Определяемся с технологией
7
Для этого реализуем типичный экран приложения
• Асинхронное получение JSON данных
• Рендер Spinner’а (индикатора загрузки)
• Рендер TableView
JSON — Spinner — TableView
8
9
Сравним реализацию
Асинхронное получение JSON и сериализация
Objective-C React Native
1/3
10
Сравним реализацию
Рендеринг Spinner (Индикатор загрузки)
Objective-C React Native
2/3
11
Сравним реализацию
Рендеринг TableView
Objective-C React Native
3/3
Декларативное описание UI
12
13
Декларативное описание UI
14
Декларативное описание UI
15
Декларативное описание UI
16
Декларативное описание UI
17
Декларативное описание UI
18
Декларативное описание UI
Разработка на примере 📱
Список товаров Список луков Поиск
19
Реализация
TabBar
20
21
~/dev/lookbuck_app/index.ios.js
Реализация
NavigationBar
22
23
~/dev/lookbuck_app/FeedNavPage.ios.js
~/dev/lookbuck_app/index.ios.js
24
~/dev/lookbuck_app/FeedNavPage.ios.js
~/dev/lookbuck_app/index.ios.js
25
~/dev/lookbuck_app/FeedNavPage.ios.js
~/dev/lookbuck_app/index.ios.js
26
~/dev/lookbuck_app/FeedNavPage.ios.js
~/dev/lookbuck_app/index.ios.js
Реализация
Scrollable Tabs
27
28
~/dev/lookbuck_app/FeedPage.js
~/dev/lookbuck_app/IndexTabBar.js
Реализация
FeedView (Список товаров)
29
30
~/dev/lookbuck_app/FeedItemsView.js
Получение товаров (JSON)
31
~/dev/lookbuck_app/FeedItemsView.js
Рендеринг списка товаров
32
~/dev/lookbuck_app/FeedItemsView.js
Рендеринг карточки товара
33
~/dev/lookbuck_app/FeedItemsView.js
Обработчик тапа по товару
Готово
34
Анимации
35
1. Объявление анимации для компонента в render()
2. Запуск анимации
Анимации
36
2. Объявление анимации для компонента в render()
1. Интерполяция входящих значений
Tools
37
• Call Stack
• Breakpoints
• Perfomance Monitor
• Profiler (CPU / Mem)
• Inspector
• Live Reload
Call Stack
38
Breakpoints
39
Perfomance Monitor
40
CPU Profiler
41
Inspector
42
43
Live Reload
Тестирование
• Unit-тесты
• Интеграционные тесты
• Снэпшот тесты
Unit-тестирование
$ npm install --save-dev jest-cliУстановка JEST:
Создание папки с 

будущими тестами:
$ mkdir __tests__
Создаём сам тест:
Запуск: $ npm test
Интеграционное тестирование
46
• Cucumber.io
• Calabash (calaba.sh)
Snapshot тестирование
47
• Snapshot (Fastlane)
• Xcode 7.0 (встроенные тулз)
Активное сообщество
Огромное количество готовых компонентов,
которые активно развиваются и обновляются
https://js.coach/react-native
48
Ограничения ⚠
3. Есть целые компоненты, 

которые работают только в одной из платформ
StatusBarIOS, ActivityIndicatorIOS, ToolbarAndroid, …
2. У компонентов есть свойства, 

которые работают только в одной из платформ.
<Image onError> только для iOS
<Image overlayColor> только для Android
4. Может не быть готового UI-компонента, тогда придется 

самому писать Bridge (Javascript ↔ Objective-C | Swift | Java)
Что как следствие сильно затормозит скорость разработки
49
1. Минимальные требования к версиям OS:
Android 4.1 (API 16) +
iOS 7+
…
Бонус
50
Если вы написали iOS-приложение, 

то 80 — 90% кода для Android уже готово
🎁
51
Используем TabBar

вместо TabBarIOS
Портирование на Android 1/3
52
Портирование на Android 2/3
Используем Navigator

вместо NavigatorIOS
Причем Navigator полностью
кроссплатформенный.
53
Портирование на Android 3/3
Всё остальное
остаётся без изменений
— Если код запущен на платформе iOS, то импортируется

IndexPage.ios.js
Полезные штуки
Умный Import
— Если на платформе Android, то импортируется 

IndexPage.android.js
54
— Если файла с дополнительными расширениями нет, то
IndexPage.js
Полезные штуки
55
Специфичный платформе код
Можно также узнавать версию OS, 

в которой приложение работает
Полезные штуки
Возможность использования JS-библиотек 

от nodejs и frontend разработчиков
Несколько примеров
Moment.js
Underscore.js
URI.js
…
56
• Мы получили готовое нативное iOS приложение за
одну неделю (за 2 недели оно было доступно в App Store)
• Сэкономили сотни тысяч рублей на разработку
таких же приложений на Objective-C и JAVA (и
возможно миллионы на поддержку и развитие)
57
В итоге
Используя React Native
Спасибо
Приложение iOS — LOOKBUCK
Сайт LOOKBUCK

More Related Content

React Native в продакшне