当我使用React Native开发混合应用程序时。当我从React Native代码创建Android-App时,我编写的JavaScript代码是否会转换为Dalvik / ART Runtime的Java-Code或Java-Bytecode?或者只是编译为本机UI组件的UI组件?或者像Fetch API这样的库是否将JavaScript代码编译为Java-Code或Java-Bytecode? p>
答案 0 :(得分:55)
基本上,你写Javascript。 Javascript与本机组件通信(Android上的Java,iOS上的Objective C,Windows上的C#)。
通过所谓的“桥梁”进行通信。如果您认为此通信过于缓慢,则可以选择分别在Java,Objective C或C#中实现Javascript功能,以便纯粹运行本机。在这种情况下,您直接使用本机代码编写,因此本机编译没有Javascript。
这会牺牲性能的兼容性。通常情况下,这不是必需的。
答案 1 :(得分:18)
代码仍然是JavaScript本机代码,不会转换为任何其他格式。混合应用程序在本机容器应用程序内运行,该应用程序调用JavaScript运行时引擎,负责执行JavaScript代码。我希望这澄清了这个问题。
答案 2 :(得分:5)
我看到的最好的解释-
00:00-03:55
https://www.youtube.com/watch?v=6ZnfsJ6mM5c&t=1228s
“在编译后的本机应用程序中-所有UI(Buttons,Text ...) 将其编译为本地代码(Java或Objective C),而JavaScript部分将 保持JavaScript。”
完整说明-
08:06-14:10
答案 3 :(得分:3)
本质上,React Native可以看作是一组React 组件,其中每个组件代表相应的本机 视图和组件。
React Native体系结构中也包含两个部分:
本地代码/模块:对于iOS,大多数本地代码是用Objective C或Swift编写的,而对于Android,则是 用Java编写。但是对于编写我们的React Native应用程序,我们几乎不会 曾经需要为iOS或Android编写本机代码。
JavaScript VM::运行我们所有JavaScript代码的JS虚拟机。在iOS / Android模拟器和设备上,React Native 使用JavaScriptCore,这是支持JavaScript的引擎 苹果浏览器。 JavaScriptCore最初是一个开源JavaScript引擎 为WebKit构建。如果是iOS,React Native使用JavaScriptCore 由iOS平台提供。它最初是在iOS 7中引入的 使用OS X Mavericks。
对于这些部分之间的通信:
React Native Bridge :React Native Bridge是一个C ++ / Java桥,它是 负责本机和Javascript之间的通信 线。自定义协议用于消息传递。
答案 4 :(得分:3)
反应原生
反应-> JavaScriptCore->本机代码->“您所看到的”
混合应用
JavaScript->本机WebView包装器->“您所看到的”
答案 5 :(得分:0)
reat native用作包装器,例如,如果您想在布局中放置按钮,只需将button标记放在布局中,但是此按钮来自本地android按钮,而您仅使用UI模块中称为React-native的特定API。您可以创建自定义的本机模块,并轻松地在您的react本机项目中使用它。