Компилирует ли React Native JavaScript в Java для Android?

Когда я разрабатываю гибридные приложения с React Native. Преобразуется ли код JavaScript, который я пишу, в Java-Code или Java-Bytecode для среды выполнения Dalvik / ART, когда я создаю Android-приложение из моего кода React Native? Или просто компоненты пользовательского интерфейса скомпилированы в собственные компоненты пользовательского интерфейса? Или такая библиотека, как Fetch API, компилирует код JavaScript в Java-Code или Java-Bytecode?


person unlimited101    schedule 13.12.2016    source источник


Ответы (6)


По сути, вы пишете Javascript. Javascript взаимодействует с собственными компонентами (Java в Android, Objective C в iOS, C # в Windows).

Связь происходит через так называемый «мост». Если в какой-то момент вы почувствуете, что эта коммуникация слишком сильно замедляет работу, вы можете выбрать реализацию функциональности Javascript в Java, Objective C или C # соответственно, чтобы работать исключительно на нативном уровне. В этом случае вы пишете непосредственно в машинном коде, поэтому для нативной компиляции нет Javascript.

Это принесет в жертву совместимость ради производительности. Обычно в этом нет необходимости.

  • дальнейшее чтение

Понятие моста React Native

person Marc    schedule 13.12.2016
comment
Лучший ответ, потому что он такой наглядный. Спасибо. Вы сравнивали производительность логики JavaScript и логики Java? Например. вы запускали сетевой запрос, например, Загрузите Api и сравните время выполнения, например, с дооснащение? Конечно, это больше зависит от скорости сети, чем от локальной скорости. Возможно, вы сделали другие сравнения производительности, например получение объекта камеры изначально и через JavaScript? - person unlimited101; 14.12.2016
comment
Это не гибрид в смысле чего-то вроде Ionic, где вы, по сути, запускаете JS в веб-стиле в веб-просмотре. В React Native Javascript взаимодействует с Java или Objective C и создает собственные элементы. Родной язык может означать разные вещи в зависимости от того, где вы находитесь - этот раздел этого выступления помог мне лучше понять его (я также рекомендую остальную часть выступления): youtu.be/tWitQoPgs8w?t=318 - person Nabha; 31.10.2018
comment
Итак, мост - это, по сути, интерпретатор JS, не так ли? - person pavi2410; 20.01.2020

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

person Gurdev Singh    schedule 13.12.2016
comment
Хорошо. Вы можете сказать мне, откуда у вас эта информация? - person unlimited101; 13.12.2016
comment
facebook.github.io/react-native/docs/ - person Gurdev Singh; 13.12.2016
comment
React native - это не гибрид! - person arled; 13.06.2018
comment
Чем это отличается от реакции? - person Offenso; 11.09.2018
comment
@Led они гибридные - они управляются через javascript - который не является родным. Код javascript генерирует собственные компоненты и интерфейсы с собственными функциями. Однако код, который вы пишете, НИКОГДА не конвертируется в реальный родной язык, например он никогда не превращает ваш код реакции в java или swift - следовательно, его гибрид. ЕСЛИ код при компиляции преобразовал каждую строку javascript в kotlin или что-то в этом роде, тогда да, на 100% нативный, но это не на 100% нативный, поэтому гибридный :) - person Owen; 01.04.2019
comment
@Owen React Native - кроссплатформенный, а не гибридный. Есть разница, друг мой. - person arled; 02.04.2019
comment
@Led Я думаю, что ваше определение гибрида отличается от остального мира. Помимо модных словечек Гибрид в основном означает, что и React - это javascript, и React Native Bridge - это C / Java, то есть немного javascript и немного нативного. Таким образом, гибрид, как и гибридные автомобили, они немного электрические, немного бензиновые. Если вы понимаете, что гибрид означает только веб-просмотры, тогда правильно, он не использует веб-просмотры. Однако он все еще не полностью нативен, что может стать гибридом, 90% которого в любом случае являются кросс-платформенными. - person Owen; 02.04.2019

На основе "React Made Native Easy" книга:

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

Также в архитектуре React Native есть две части:

  1. Собственный код / ​​модули: большая часть собственного кода в случае iOS написана на Objective C или Swift, а в случае Android - на Java. Но для написания нашего приложения React Native нам вряд ли когда-либо понадобится писать собственный код для iOS или Android.

  2. Виртуальная машина Javascript: виртуальная машина JS, на которой выполняется весь наш код JavaScript. На симуляторах и устройствах iOS / Android React Native использует JavaScriptCore, движок JavaScript, на котором работает Safari. JavaScriptCore - это движок JavaScript с открытым исходным кодом, изначально созданный для WebKit. В случае iOS React Native использует JavaScriptCore, предоставляемый платформой iOS. Впервые он был представлен в iOS 7 вместе с OS X Mavericks.

А для связи между этими частями:

React Native Bridge: мост React Native - это мост C ++ / Java, который отвечает за связь между собственным потоком и потоком Javascript. Для передачи сообщений используется специальный протокол.

person Morteza Ziyae    schedule 22.11.2018

Лучшее объяснение, которое я видел -

00:00 - 03:55

https://www.youtube.com/watch?v=6ZnfsJ6mM5c&t=1228s

«В приложении React native после компиляции - весь пользовательский интерфейс (кнопки, текст ...) будет скомпилирован в собственный код (Java или Objective C), а часть JavaScript останется JavaScript».

Для полного объяснения -

08:06-14:10

https://www.youtube.com/watch?v=qSRrxpdMpVc

введите описание изображения здесь

person Barak    schedule 11.05.2020

React Native

React -> JavaScriptCore -> Собственный код -> «Что вы видите»

Гибридное приложение

JavaScript -> Собственная оболочка WebView -> «Что вы видите»

person smoosh911    schedule 11.10.2019

React Native работает как оболочка. Например: если вы хотите поместить кнопку в свой макет, вы просто добавите тег button. Затем вы используете определенный API из модуля пользовательского интерфейса, чтобы отобразить это на Android. Вы можете легко создавать собственные собственные модули для использования в своих проектах React Native. Однако код, написанный изначально, часто бывает быстрее.

person N.SH    schedule 10.10.2018