Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
React Native使用什么来允许JavaScript以本机方式在iOS和Android上执行?_Javascript_Android_Ios_Reactjs_React Native - Fatal编程技术网

React Native使用什么来允许JavaScript以本机方式在iOS和Android上执行?

React Native使用什么来允许JavaScript以本机方式在iOS和Android上执行?,javascript,android,ios,reactjs,react-native,Javascript,Android,Ios,Reactjs,React Native,在与iOS和Android的接口中,本机使用的是什么?Cordova使用WebView有效地显示本机容器内的网页;React Native是否使用相同的方法?如果不是,它使用什么方法?正如您所注意到的,React Native不是基于Cordova的。它不是一个看起来像是被塞进网络视图的应用程序的网站 React Native使用JavaScript运行时,但UI不是HTML,也不使用WebView。您可以使用JSX和React本机特定组件来定义UI 它提供了本机级别的性能和外观,但一些UI部件

在与iOS和Android的接口中,本机使用的是什么?Cordova使用WebView有效地显示本机容器内的网页;React Native是否使用相同的方法?如果不是,它使用什么方法?

正如您所注意到的,React Native不是基于Cordova的。它不是一个看起来像是被塞进网络视图的应用程序的网站

React Native使用JavaScript运行时,但UI不是HTML,也不使用WebView。您可以使用JSX和React本机特定组件来定义UI


它提供了本机级别的性能和外观,但一些UI部件必须为iOS和Android单独配置。例如,工具栏完全不同,但两种操作系统的TextInput可以相同。

在iOS模拟器和设备上,Android模拟器和设备使用JavaScriptCore作为Safari的JavaScript引擎。
运行Javascript代码

React Native在Android/iOS模拟器和设备上使用JavaScriptCore(支持Safari的JavaScript引擎)

对于Android,React Native将JavaScriptCore与应用程序捆绑在一起

对于iOS,React Native使用iOS平台提供的JavaScriptCore

与Android/iOS通信

使用React本机桥(C++/Java桥)。它负责本机线程和Javascript线程之间的通信

在大多数情况下,开发人员会用Javascript编写整个React本机应用程序。要运行应用程序,通过CLI发出以下命令之一-
react native run ios
react native run android
。此时,React Native CLI将生成一个节点打包器/绑定器,将JS代码绑定到单个
main.bundle.JS
文件中。包装机可以被视为类似于Webpack。现在,无论何时启动React本机应用程序,第一个要加载的项目就是本机入口点。本机线程生成运行捆绑JS代码的JS VM线程。JS代码包含应用程序的所有业务逻辑。本机线程现在通过RN桥发送消息来启动JS应用程序。现在,派生的Javascript线程开始通过RN桥向本机线程发出指令。说明包括要加载的视图、要从硬件检索的信息等。


如何构建这样的组件?在这种情况下,他们为什么要谈论flexbox?如果我想添加一个组件,我是否应该知道Java(或Objective-C)?组件与Cordova相当,您可以使用Java为android和Objective-C为iOS构建它们,搜索示例。您还可以混合组件来构建其他组件,就像React一样。-您可以使用JavaScript中定义的CSS属性设置应用程序的样式。他们构建了一个基于flexbox的布局引擎来简化这个过程。他们将Webkit JavaScriptCore引擎嵌入到框架中。他们在Android和iOS上使用相同的引擎,“它提供了本机级别的性能”-不,实际上没有。他们在自己的网站上讨论性能问题。您提供的链接提供了有关性能注意事项的一般提示。我不认为有任何框架——包括核心原生SDK——没有类似的列表。