React Nativeでハイブリッドアプリを開発するとき。作成するJavaScriptコードは、ReactネイティブコードからAndroidアプリを作成するときに、Dalvik/ARTランタイムのJavaコードまたはJavaバイトコードに変換されますか?または、UIコンポーネントだけがネイティブUIコンポーネントにコンパイルされていますか?または、Fetch APIのようなライブラリはJavaScriptコードをJavaコードまたはJavaバイトコードにコンパイルしますか?
基本的に、Javascriptを作成します。 Javascriptは、ネイティブコンポーネント(AndroidのJava、iOSのObjective C、WindowsのC#)と通信します。
通信は、いわゆる「ブリッジ」を介して行われます。この通信により速度が低下しすぎると感じた場合は、JavaをJava、Objective C、またはC#にそれぞれ実装して、純粋にネイティブで実行できます。この場合、ネイティブコードで直接記述しているため、ネイティブコンパイルにJavascriptはありません。
これにより、パフォーマンスの互換性が犠牲になります。通常、これは必要ありません。
コードはJavaScriptネイティブコードのままであり、他の形式に変換されません。ハイブリッドアプリは、JavaScriptコードの実行を処理するJavaScriptランタイムエンジンを呼び出すネイティブコンテナーアプリ内で実行されます。これで質問が明確になることを願っています。
「React Made Native Easy」 本に基づく:
基本的に、React NativeはReactコンポーネントのセットと見なすことができ、各コンポーネントは対応するネイティブビューとコンポーネントを表します。
また、Reactネイティブアーキテクチャには2つの部分があります。
ネイティブコード/モジュール:iOSの場合のネイティブコードのほとんどはObjective CまたはSwiftで記述されていますが、Androidの場合Javaで書かれています。しかし、Reactネイティブアプリを記述するために、iOSまたはAndroidのネイティブコードを記述する必要はほとんどありません。
Javascript VM:すべてのJavaScriptコードを実行するJS仮想マシン。 iOS/AndroidシミュレーターおよびデバイスReact Nativeでは、Safariを駆動するJavaScriptエンジンであるJavaScriptCoreを使用します。 JavaScriptCoreは、もともとWebKit用に構築されたオープンソースのJavaScriptエンジンです。 iOSの場合、React NativeはiOSプラットフォームが提供するJavaScriptCoreを使用します。これは、OS X MavericksとともにiOS 7で初めて導入されました。
そして、これらの部分間の通信のために:
React Nativeブリッジ:React Nativeブリッジは、ネイティブスレッドとJavascriptスレッド間の通信を担当するC++/Javaブリッジです。メッセージの受け渡しにはカスタムプロトコルが使用されます。
reat nativeはラッパーとして機能します。たとえば、レイアウトにボタンを配置する場合は、ボタンタグをレイアウトに配置するだけですが、このボタンはnative Android buttonから取得し、UIから特定のAPIを使用するだけです反応ネイティブと呼ばれるモジュール:カスタムネイティブモジュールを作成し、それを反応ネイティブプロジェクトで簡単に使用できます。