- PVSM.RU - https://www.pvsm.ru -
Итак, пришла пора быстро погрузиться в тему. Для усиления эффекта, использую разные техники [1] трансформации информации в знания. В частности, представляю конспект доклада Алексея Андросова [2] (старшего разработчика интерфейсов, Yandex).
Write once, run everywhere? Нет! Вместо ожидаемых предположений, что один и тот же код будем использовать многократно на разных платформах. Learn once, write everywhere. Одинаковая архитектура приложения (React для построения интерфейса, Redux для круговорота данных).
Все нативно, поэтому забудьте про полную кроссплатформенность. Платформы разные, поэтому и компоненты разные. У них разная логика и механика взаимодействия. Можно писать все на JS и выкинуть понятие native, но вы этого не хотите. Native — это ваше преимущество!
На примере приложения Vine в iOS. Что принято делать в iOS? Внизу TabBar, в нем принято переключать экраны: главная, профиль, поиск. Сверху NavigationBar, и в нем принято писать название и кнопки слева-справа (слева обычно back стоит, а справа — какое-нибудь действие). А в Android все не так. Есть тоже NavigationBar, но он другой, в нем не принято кнопки делать. Для этого есть отдельный компонент, называется ToolBar-ом. В Android-е принято делать SegmentedActivity — она сверху, очень похожа на iOS TabBar, но механика работы у него абсолютно другая. Если в TabBar-е мы не можем свайпом переключать экраны, то в Android-е это можно делать, и это принято делать, и именно так оно и работает.
Приложение строится из компонент платформы — это нативные модули, завернутые в React-компоненты
[Вот так это выглядит, реальный код]
Интересно, что кнопок нет! Для вас любая кнопка — это просто стилизованная область, у которой есть обработчик нажатия. Никакой механики кнопки нет. И поэтому в React-е есть вот эти touchable-элементы, вы оборачиваете всё, что угодно и у вас всё что угодно становится кнопкой по сути (есть обработчик onPress). Scroll-ы — отдельный компонент. Это сегментированный вид. Он рендерит только то, что находится на экране, и с ним нужно работать чуть по другому. Потому ScrollView тут тоже отдельный. Отдельная механика, если используется клавиатура. Потому отдельное свойство есть — чего с ним делать. Отдельно свойство refreshControl. Если кто-то знает, как разрабатывать на iOS, то это очень похоже.
[Вот как выглядит текстовое поле]
Какие-то свойства совпадают с привычным HTML-input-ом, а другие — нет.
[Пример CSS #1]
Компонент PixelRatio преобразует значения из density points в настоящие пиксели для разных экранов (Retina и прочее).
[Пример CSS #2]
Вот это пример с flex-ом. Хватает минимального набора, чтобы верстать.
[Пример кода приложения]
Имеет ряд проблем:
Во многом, проблемы решаются с помощью redux.
[Почему это плохо?]
Чтобы запушить какой-нибудь роут, или сделать back (перемотать на другой экран) — надо сделать ссылку на Navigator, а потом эту ссылку получить. Причем изначально её не будет, т.к. Navigator-а еще нету.
[Интерфейс выглядит, как связанные компоненты]
[А на самом деле всё выглядит вот так]
В декабре 2015 Eric Vicenti организовал проект navigation-rfc, с помощью сообщества, попытался решить проблемы Navigator. В феврале 2016 проект переехал в мастер React Native под название NavigationExperimental и теперь развивается силами Facebook. А старый Navigation больше не будет поддерживаться.
[Пример кода навигации]
[Пример кода анимации]
Работает очень плавно, можно комбинировать последовательно/параллельно, и делать довольно безумные штуки.
React Native реализует основные, но не все. Если модуля нет:
Используйте rnpm — React Native package manager:
$ rnpm link react-native react-native-google-analytics-bridge
Неправильный путь — разложить все по папкам:
и подключать их в зависимости от платформы
Правильный путь — разложить все по папкам:
Для платформо-зависимых компонент (ComponentIOS, ComponentAndroid) удобно класть рядом пустышку, и не испытывать проблем, что какой-то компонент не найден на платформе.
Финал доклада, видео с этого места [3].
Автор: comerc
Источник [4]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/javascript/247808
Ссылки в тексте:
[1] разные техники: https://habrahabr.ru/post/322084/
[2] доклада Алексея Андросова: https://www.youtube.com/watch?v=RwTmWpZ0MyA
[3] видео с этого места: https://www.youtube.com/watch?v=RwTmWpZ0MyA&feature=youtu.be&t=1973
[4] Источник: https://habrahabr.ru/post/323214/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.