Ответ 1
TLDR: Скорее всего, вы можете. Но это зависит от ваших вариантов использования.
Вы можете стремиться к 80 ~ 99+% повторному использованию кода (в зависимости от того, сколько собственных представлений/модулей Android/iOS вы используете, например. У вас есть пользовательский графический код или сетевой код низкого уровня TCP; это может быть сделано только в собственном коде; предоставляется как API для вашего JS-кода. Количество JS-кода для конкретной платформы на самом деле минимально. Кроме того, вы также можете использовать проверку платформы, например, if (Platform.OS === 'android'){}
, для повторного использования кода, что довольно отлично. Dropbox и другие компании сделали похожий проект: используя c++ для создания "общего" компонента между проектами iOS и Android, в то же время реализуя большую часть кода пользовательского интерфейса на родных iOS (Objective-c или swift) и Android (java). Но теперь вы делаете c++ с Java и ObjectiveC или Swift, больше языка для освоения, больше сложности и больше мозгового сока. И, вероятно, потребовался какой-то сверхтяжелый гимнастический шаг, чтобы заставить работать другой нативный код на iOS и Android, плюс отладка...
React Native просто делает намного проще писать практически все на JavaScript. Но есть одна загвоздка, только около 80% кода JS может быть передано. В обозримом будущем вам все еще нужно написать JS-код "для платформы" для версий Android и iOS.
Вот почему FB сказал, что они стремятся "Учиться один раз, код везде" вместо "бегать" везде.
Но это все еще очень приятно, кроме повторного использования кода (80+% повторное использование кода все еще является большим улучшением по сравнению с поддержкой двух совершенно разных версий: Android и iOS, да?)
Cmd +R для обновления приложения - БОЛЬШОЙ прирост скорости разработки. Ожидание большого проекта для компиляции просто заставило вас почувствовать, что вы умираете внутри..
Декларативный интерфейс вы получаете бесплатно, благодаря использованию React. Это еще один большой плюс! Поскольку вам больше не нужно "копаться" в вашем конкретном коде пользовательского интерфейса, который часто больше. Данные изменились? Просто "очистите" его, и пользовательский интерфейс просто обновится соответствующим образом. Не теряется мозговой сок.
Я только что портировал свое не очень сложное приложение Android React Native на iOS. И это заняло у меня 3 дня. Запрос на iOS-версию для приложения был довольно резким и незапланированным. Так что определенно могло бы быть еще быстрее, если бы я создал Android с планом для iOS тоже. Огромная победа :)
Еще одно большое преимущество заключается в том, что можно быстро нажимать на код, не проходя адский процесс просмотра в магазине в течение 1 недели. Так что не надо больше: "ДА, наше приложение одобрено. Пусть выпустят. О, Шииит. Критическая ошибка, и наше приложение продолжает падать (это будет происходить в течение, по крайней мере, недели, прежде чем будет исправлено ваше исправление). И вы должны попросить Apple ускорить работу. до процесса ". Это возможно потому, что основная часть кодовой базы будет написана на JS, и с помощью таких инструментов, как AppHub или CodePush, вы можете почти мгновенно развернуть код для своих пользователей. Это условно разрешено Apple.
3.3.2 Приложение не может загружать или устанавливать исполняемый код. Интерпретированный код может использоваться только в Приложении, если все сценарии, код и интерпретаторы упакованы в Приложении и не загружены. Единственным исключением из вышеизложенного являются скрипты и код, загружаемые и запускаемые встроенной платформой Apple WebKit, при условии, что такие скрипты и код не меняют основной цели Приложения, предоставляя функции или функции, которые не соответствуют предполагаемой и объявленной цели. приложения в том виде, в котором оно было отправлено в App Store.
Наконец, как проект с открытым исходным кодом, проект долголетия имеет тенденцию вызывать беспокойство. Не проблема для React Native. Внутренне используемый (Менеджер рекламы FB) и поддержанный FB (дюжина инженеров FB?) Facebook, с около 500 участников и 25 тысячами звезд, React Native полон живой. Видеть значит верить :) (https://github.com/facebook/react-native)
ОБНОВЛЕНИЕ 1
Я понял, что я немного предвзят, и говорил только о хороших материалах о React Native. Так что делайте оформление заказа https://productpains.com/product/react-native/ и Github, чтобы получить полную картину. Это определенно не серебряная пуля. Тем не менее, это удовлетворяет большинству моих вариантов использования, и я не мог видеть, что я использую родную iOS или Android в ближайшее время.
ОБНОВЛЕНИЕ 2 Релиз приложения для конференции Facebook F8 от Facebook (duh..) на 100% с открытым исходным кодом, и у них есть действительно хороший учебник, который покажет вам, как вы можете использовать both как для iOS, так и для Android (на 90% лучше родной?), и в то же время достиг 85% повторного использования кода. проверить это → https://makeitopen.com
ОБНОВЛЕНИЕ 3 Вы также можете проверить Flutter и его плюсы & минусы :)