Когда я разрабатываю гибридные приложения с React Native. Преобразуется ли код JavaScript, который я пишу, в Java-Code или Java-Bytecode для среды выполнения Dalvik / ART, когда я создаю Android-приложение из моего кода React Native? Или просто компоненты пользовательского интерфейса скомпилированы в собственные компоненты пользовательского интерфейса? Или такая библиотека, как Fetch API, компилирует код JavaScript в Java-Code или Java-Bytecode?
Компилирует ли React Native JavaScript в Java для Android?
Ответы (6)
По сути, вы пишете Javascript. Javascript взаимодействует с собственными компонентами (Java в Android, Objective C в iOS, C # в Windows).
Связь происходит через так называемый «мост». Если в какой-то момент вы почувствуете, что эта коммуникация слишком сильно замедляет работу, вы можете выбрать реализацию функциональности Javascript в Java, Objective C или C # соответственно, чтобы работать исключительно на нативном уровне. В этом случае вы пишете непосредственно в машинном коде, поэтому для нативной компиляции нет Javascript.
Это принесет в жертву совместимость ради производительности. Обычно в этом нет необходимости.
- дальнейшее чтение
Код остается собственным кодом JavaScript и не конвертируется в какой-либо другой формат. Гибридные приложения запускаются внутри собственного контейнерного приложения, которое вызывает механизм времени выполнения JavaScript, который заботится о выполнении кода JavaScript. Надеюсь, это проясняет вопрос.
На основе "React Made Native Easy" книга:
По сути, React Native можно рассматривать как набор компонентов React, где каждый компонент представляет соответствующие собственные представления и компоненты.
Также в архитектуре React Native есть две части:
Собственный код / модули: большая часть собственного кода в случае iOS написана на Objective C или Swift, а в случае Android - на Java. Но для написания нашего приложения React Native нам вряд ли когда-либо понадобится писать собственный код для iOS или Android.
Виртуальная машина 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. Для передачи сообщений используется специальный протокол.
Лучшее объяснение, которое я видел -
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
React Native
React -> JavaScriptCore -> Собственный код -> «Что вы видите»
Гибридное приложение
JavaScript -> Собственная оболочка WebView -> «Что вы видите»
React Native работает как оболочка. Например: если вы хотите поместить кнопку в свой макет, вы просто добавите тег button
. Затем вы используете определенный API из модуля пользовательского интерфейса, чтобы отобразить это на Android. Вы можете легко создавать собственные собственные модули для использования в своих проектах React Native. Однако код, написанный изначально, часто бывает быстрее.