Как стать автором
Обновить

Комментарии 84

NavigationExperimental уже эволюционировал в https://reactnavigation.org/ "Learn once, navigate anywhere". Я не знаю всей истории, но похоже, что это будет рекомендованным решением (сейчас он на этапе беты).

Собственно «вся история» старого навигатора заключается в том, что Navigator, ключевой компонент любого RN-приложения… не подчиняется React-логике! Когда в корневом элементе меняешь state, и Navigator получает таким образом новые проперти, он чхать на это хотел, а все переходы выполняются императивно, старыми-добрыми push() и pop(). С redux соответственно он тоже нифига не дружит.

И об этом даже не написано в документации, хотя как раз об этом-то стоило упомянуть, ну не знаю, ЖИРНЫМ КРАСНЫМ МИГАЮЩИМ ЗАГОЛОВКОМ в самом верху описания компоненты.

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

Чем NavigatorExperimental по сути отличается от Navigator, в документации тоже не описано (спасибо автору статьи, теперь хоть буду знать).

Буквально вчера искал, как React-приложении выполнить переход между страницами, ничего лучше, чем router.push() пока не нашел. Пример. Надеюсь, что плохо искал.

Долго изучал этот вопрос, остановился на https://github.com/aksonov/react-native-router-flux
Только там Drawer необычайно тормозной, вместо него использую https://github.com/react-native-community/react-native-side-menu

Пожалуйста, можно пример, как выполнить переход между экранами?

В 0.43 NavigationExperimental будет deprecated.

А как бы побыстрее собирать проект на этапе разработки под Android? На IntelXDK сборка проекта PhoneGap выполнялась шустро, если не путаю. Судя по видео в конце доклада, для Mac-а тоже Simulator готов к изменениям кода практически в реальном времени. А в Android Studio наблюдаю задержку 20 сек.

  • XCode и $100 в год на Developer account, чтобы собирать и публиковать приложения
  • Терпение + Android Studio + SDK + Эмулятор

Можно немного срезать угол, по крайней мере на этапе прототипирования, если использовать Exponent:


Exponent lets web developers build truly native apps that work across both iOS and Android by writing them once in just JavaScript.
It's open source and free and uses React Native.
как я понял, еxponet — это для написания собственных приложений в базовом приложении, чем-то похоже на AdobeAir. Ставишь на телефон exponet, а потом делаешь/загружаешь приложения для него.
Верно?

У них есть два режима и они не взаимоисключающие. Можно быстро и бесплатно получить своё приложение на телефоне запустив его через клиент, а можно собрать пакет и опубликовать в стор, тогда и появляется +$100 на iOS и +$50 на Android. Эта идея не нова, как минимум я такое видел для приложений "PhoneGap поколения", например, AppGyver.

Недавно закончил небольшой хобби проект
Веб (react-native-web) + андроид (react-native).
http://ru.quizexer.com/
От работы с React Native остались по большей части положительные впечатление.
Из всего кросплатформенных решений (веб/мобайл) что перепробовал, этот вариант считаю наиболее удачный.
Да, есть баги и пока не хватает нативных модулей, но код получился практически идентичный,
что для хобби проекта главный плюс.
И вместо js можно использовать любой язык который в него компилируется, что тоже большой плюс.

По опыту, каких компонентов не хватает? Автор доклада уверяет, что уже можно найти все, что угодно.

Даже для такого простого приложия(хотя немного специфичного),
пришлось написать два нативных модуля.
1) для работы c SoundPool (Есть react-native-sound но это не совсем то и он немного глючный, крашил приложение на ряде устройств)
2) для работы с Google Play Leaderboards.

Выбор Redux для хранения глобального состояния чем обусловлен? Альтернативы рассматривались?

Redux — это архитектура приложения. Хотя камрады на Clojure со мной не согласны. У них свои велосипеды.

Насколько мне известно, Redux — библиотека (http://redux.js.org/ — Redux is a predictable state container for JavaScript apps. ), реализующая подмножество Flux архитектуры.

Из подмножества Flux, для меня очевидный выбор — Redux. Просто в силу его популярности, отсюда все вытекающие: документация, поддержка, расширения, вакансии, резюме. Так-то я уже наигрался с никому не нужными велосипедами.

Интересно, что кнопок нет!

Уже есть, старый способ кастомизации стилями тоже остался.
подключайте redux, без него будет совсем плохо

Почему не: «подключайте mobx, без него будет совсем плохо»?

Мопед не мой.

Почему следует использовать именно React Native, вместо, к примеру, Cordova?
UI получается нативный. Совсем другое ощущение от работы с приложением.

А что творилось с PhoneGap на iOS в мою бытность полтора года назад — это не передать литературными словами. Тогда и родилась мечта освоить React Native.

На видео выше — летает, если сравнивать с поделкой на Meteor-е. Второй проект PhoneGap на Phaser — уже лучше. Хотя там только HTML5-canvas, а все равно лаги. Crosswalk обещал помочь, но я этого уже не дождался.

Cordova не виновата, то Ionic такой тормозной. Мы вот на $mol разрабатываем и ничего не тупит.

Не верю. Вся надежда на React Native и подобное.

Ну вот прямо сейчас пилю приложение на кордове:


Вполне!

NativeScript = Angular. Чур меня! :)

Ну, там и без него можно, но вроде как нативный интерфейс надо описывать на ихнем XML. Ещё они css парсят, а не в свойства пихают, как в RN.

Ionic — редкостный тормоз. Нашли с чем сравнивать.

Принцип тот же, отзывчивость интерфейса — примерно та же. Тут был смысл показать разницу в отзывчивости между вебвью и нейтивным гуем, пусть даже и с логикой на js.

Я вам по секрету скажу — в WebView тоже можно использовать аппаратное ускорение анимаций.

А никто про анимацию и не говорил — тут скорее сама сложность интерфейса в плане отрисовки и количества виджетов. Ну и не везде оно адекватно работает, те же тени на штатном андроид-браузере <= 4.0 адски тормозили и их приходилось отрубать.

Экран обычно не очень большой, так что число одновременно видимых виджетов весьма ограничено, что позволяет используя ленивый рендеринг получать хорошую отзывчивость.


А в нативе не тормозили? Впрочем, емнип, начиная с 4 нативный браузер использует уже движок хрома. Ну и crosswalk подключается одной командой в консоли. Правда увеличивает бандл на 20 метров.

Перед стартом нового проекта, мы в нашей компании изучили возможные варианты создания мобильных приложений с нативным UI. От React Native остались весьма негативные впечатления:

1. Инструменты для разработки очень глючные (по состоянию на месяц обратно), постоянно приходится что-то перезапускать.
2. React Native намертво привязан к React.
3. Продукт слишком сырой в целом: плохая документация, частые изменения API, куча багов в компонентах и т.д.
4. React Native ничего не знает про нативные стили компонент, создалось впечатление, что он на самом деле нативные компоненты вообще не использует, а тупо их эмулирует в нативном коде вместо WebView.
5. Приходится писать слишком много разного кода для двух платформ. С тем же успехом можно делать просто два нативных приложения и не страдать с глючным реактом.

Наш вывод: если есть желание использовать JS для разработки приложений, то стоит использовать NativeScript.
React Native намертво привязан к React.

Может это был основной вопрос? Я сам очень долго испытывал аллергию к JSX.

Нет, не основной. Но такая привязка всегда минус. NativeScript и Cordova позволяют использовать что душе угодно.

React тянет за собой Redux (или навязывает, пока не разобрался до конца с глаголами). И это же счастье, когда мне кто-то говорит, как нужно обустроить порядок в проекте — снимает большой головняк, когда ресурсы ограничены. Мы все умрём, как известно. Просто некоторые относятся к вопросу беспечно.

Абсолютно никакой связи между react и redux, как и между react и всеми производными от flux. Например, можете попробовать MobX. На хабре, кстати, тоже были статьи про него.

Я тоже думал, что вообще возьму Relay, и заживу наконец-то, как белый человек. Но Redux затягивает, и другого счастья мне уже не надо. :)

Ну так то, что приглянулось одно из решений — это не значит, что react его требует или навязывает, это исключительно личное предпочтение :)
Тоже сначала думал, что не надо никаких Redux'ов. Подёргался-подёргался, как муха в паутине, и затих. Нельзя сказать, что он мне понравился, просто [п]оказался единственным годным выходом.

Redux понравится не сразу, как и сам React :)

Мне Redux сначала нравился, когда знакомился только с его идеями, но потом всё меньше и меньше. Главное, что не нравится: Redux почти полностью игнорирует, что JS — ООП язык.

И тут я с ним согласен! Сублимация Clojure.

Инструменты для разработки очень глючные (по состоянию на месяц обратно), постоянно приходится что-то перезапускать.

Это видимо под Android, или под iOS тоже?

Нет, я про консольные тулзы, что на компе работают. Всё очень сыро пока.

Какие, конкретно? Пожалуйста, подробности!

Дев сервер постоянно тупит, например, и перестает подхватывать изменения.
facebook рекомендует ставить watchman из-за какого-то «бага» в отслеживании изменений в файлах, возможно это оно?
Наш вывод: если есть желание использовать JS для разработки приложений, то стоит использовать NativeScript.

Не понял, а вы ушли с JS?

Мы для разных проектов используем разные технологии.

Всё в тумане! :)

Поставил на Айпад демо-приложение от Weex. Очень положительные впечатления от скорости работы.

Ожидаемо. Что будет со всеми теми же деталями по пунктам, которые озвучены в этом докладе?

Уточнил у автора доклада: какие компоненты использовал для SVG?


Смотря для чего нужен svg.

react-native-svg — это реализация svg поверх нативных компонент. Я ее как-то раз использовал, чтобы рисовать хитрые фигуры и круговые градиенты. react-native-svg-uri работает поверх нее и позволяет загружать svg из внешних источников. Ничего лучше для svg я пока не нашел.

Если ты хочешь использовать svg-оконки, как это принято в вебе, то это плохоая идея. SVG работает не очень быстро. Лучше использовать обычные png через require, которые, например, можно генерировать из svg.
НЛО прилетело и опубликовало эту надпись здесь

цитирую страждущего из лички:


хочется svg для иконок интерфейса, например
просто загрузил ассеты и показал
2017 год ))

Разложите по полочкам, кто знает. Для разработки под Android — это неизбежные тормоза сборки? Пора переходить на Мак, или можно еще обождать?

О какой сборки речь? Для RN нужно один раз собрать, потом подгружаются только изменения в js.

Я говорю о подобии HMR для веба, когда любое редактирование файла инициирует апдейт проекта.
.

И в чем вопрос?

Под Android сборка занимает до 20 секунд по опыту товарища. Судя по видео, под iOS сборка выполняется почти мгновенно.

Сборкой занимается упаковщик RN. Он не привязан ни к ios ни к android.

Расшифруйте RN, пожалуйста.

Уже не надо, я осознал — React Native (RN).

А в чем счастье, если, все равно, нужно писать отдельно ветки интерфейса для андроида, ios и web?
Общие картинки и прочая статика?
Что можно вынести в общую часть проекта?

Бизнес-логику, вестимо.

Еще не совсем понял — при установке webstorm для компиляции проекта React Native требовал андроид студию и sdk версии 23 (т.е. от 6 андроида).
Это что, правда, что React Native текущей версии не работает на более ранних андроидах?

Новый сдк ведь и под старый андроид может собирать. Во всяком случае кордову под 4 я собирал.

Полгода назад трогал RN, даже собирал несколько простеньких demo-приложений. В целом впечатления положительные, но пока не уверен что стал бы использовать React Native для проектов отличных от хобби\песочниц.

Штука безусловно привлекательная, но огорчают некоторые моменты:


  • Глюки пока встречаются очень часто
  • Бардак в react-native/Libraries — без поиска найти нужный компонент очень затруднительно
  • Между некоторыми релизами очень трудно обновляться. Особенно досадно, когда зависишь от сторонней библиотеки, в которой поддержку новой версии внедрят через несколько месяцев, а то и никогда.
  • Зачастую разработчикам приходится пройти семь кругов ада чтобы влить PR
  • Проблемы выбора. До недавнего времени было 3 реализации навигатора, все 3 были признаны устаревшими, а рекомендуемое решение появилось только через 2-3 месяца, и то все-еще в бете.
  • Очень много неочевидных из документации моментов, подводных камней
  • Многие баги в JSX иногда очень трудно отлаживать, сообщения об ошибке не сильно помогают.

Несмотря на это, продолжаю пользоваться и надеюсь на то что со временем детские болезни уйдут.


Немного поправок,


  • rnpm уже включен в RN
  • в 0.42 появилась возможность задавать не только абсолютные величины, но и проценты

Ещё в копилку :)


(() => { debugger; })() || // anything

Громоздкая, но полезная штука. Позволяет залезть внутрь труднодоступных мест. Скажем какие-нибудь binding-и knockout-а. Но по сути всё, что угодно, что выполняется через new Function или eval.

Как то я не удовлетворился нативным реактом, попробовал использовать сторонний компонент, все сломалось, попробовал кодить на виндах так он эмулятор андроида не видит. Короче как-то все выглядит сыровато и невдохновенно.

Меня вдохновляют результаты труда. А если преодолевая трудности, тем больше ценность достижения. :)

https://itunes.apple.com/ru/app/millt-find-tattoo-artists/id1137884963?l=en&mt=8

Полторы недели работы вместе с дизайном (чтобы понимали никогда до этого не писал под мобильные/javascript и вообще я дизайнер который прочитал статью, что дизайнер тоже должен кодить и пошел искать чтобы такого написать). Есть баги, но уверен, что нативно я бы писал это месяц.

Что использовалось:
1. Список с автоподгрузкой и пултурефреш
2. Карты
3. Кастомные экраны и анимация (просмотр мастера, на скрине в эпсторе видно)
4. Реалтайм чат на сокетах
5. Хранение внутри приложения данных

Из интересного, не использовал redux, etc так как не знл что он существует, когда узнал было поздно, но в то же время многие опытные ребята говорят, что если ты справился без него, значит он тебе просто не нужен и не волнуйся на эту тему.

На счет "не нужен" сомнительно. Redux сильно облегчает жизнь.

В то же время и осложняет. Особенно если императивный ООП подход ближе чем функциональный.

Кроме Redux есть и другие библиотеки управления состоянием, хорошо интегрированные с React, реализующие другие подходы. А в целом, даже автор redux рекомендует сначала научить писать на голом реакте, а уж когда станет тесно, изучать редакс

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории