Как перенести мультиплатформенное приложение в React Native?
Я начал копаться в интеграции React Native в существующие приложения, и я имею в виду настоящие индустриальные приложения (версии одного и того же приложения для iOS и Android), которые мы хотим реорганизовать с использованием как можно большего количества RN, чтобы собрать вместе кодовые базы (есть также существующая веб-версия).
Мы уверены, что в том числе несколькоRCTRootView
совместное использование одного и того же моста - лучший подход для нас, начиная с базовых представлений контента (где совместное использование кодовых баз проще и выгоднее) и итерацией, чтобы превратить все больше и больше частей приложения в RN (анимация, навигация и т. д.).
Но когда мы исследовали этот подход, возникло несколько вопросов, как технических, так и организационных.
Во-первых, хотя мы не хотим быть iOS-первыми или Android-первыми, платформа Android, похоже, не имеет такой же зрелости, как платформа iOS для такого рода работы. Мы столкнулись с некоторыми проблемами, такими как:
ReactRootView
не соответствует жизненному циклу React, в отличие от iOSRCTRootView
Нет API для обновления реквизита:https://github.com/facebook/react-native/issues/6303Невозможно включитьReactRootView
внутри родного прокрутки. Это ограничение существует с первого дня выпуска Android (см.https://github.com/facebook/react-native/issues/9022)Следующее не является на самом деле «проблемой», но добавляет некоторые сомнения по поводу поддержки Android.
IOS частьинтегрирующий документ ясно упоминает, что можно начать просмотр, используя существующий мост (initWithBridge
, API тоже явный).
В Android в том же документе упоминается, что несколько представлений могут совместно использоватьReactInstanceManager
, но если вы выставляете 2 компонента в своем комплекте и используете его, вам придется звонить дваждыstartReactApplication
и вы увидите 2 строки в консоли ChromeRunning application "XXX" with appParams
Running application "YYY" with appParams
Звучит не очень оптимизировано для меня ... Я действительно создал 2 целых "RN-приложения" здесь?
При этом мы ищем отзывы и ответы:
Что касается платформы Android, разумно ли синхронизировать рефакторинг на обеих платформах или нам лучше превратить приложение iOS в RN, а затем в Android?Как далеко мы можем пойти в RN-представлениях, отображаемых одновременно? 10, 20 просмотров одновременно?Наше приложение «ориентировано на данные». Является ли хорошей идеей сначала перенести выборку данных в приложении Redux в мире RN? Я предполагаю, что мы должны предоставить данные и уведомить об обновлениях магазина в родном мире: каков наиболее эффективный способ сделать это? (Родные модули делает общение на другой стороне легким, нативным по отношению к RN, но они кажутся бесполезными для этой цели).Кроме того, как организовать VCS? Является ли перемещение четырех базовых кодов (iOS, Android, Web и RN) в моно-хранилище необходимым шагом?