React Nativeプロジェクト、CRNA、Expoプロジェクトの間の正確な違いとトレードオフを見つけるために、私は多くの研究をしました。
私の主なガイダンスは this
ただし、ExpoKitをネイティブコードで使用した場合と通常のReact通常のExpo API Reactネイティブプロジェクト。
Expoでプロジェクトを開始すると、ExpoKitプロジェクトまたはReact= Native project。両方でネイティブコードを使用できます。ExpoKitではExpo APIを使用できます。通常のReactネイティブプロジェクトではできません。
だから私の質問:
ExpoKitプロジェクトでネイティブコードとすべてのExpo APIを使用できる場合、React Nativeプロジェクトを使用することに何の関心がありますか? ExpoKitプロジェクトでは、すべてのExpo APIとすべてのReact Native APIを使用できますか?!
Expoをnpm install --save expo
でインストールする場合、Expo APIをReact Nativeプロジェクトで使用できますか?
React Native APIとExpo APIの違いは何ですか?
ExpoKitは、「純粋なJS」Expoアプリと「Vanilla」React Nativeのハイブリッドです。コアはまだReactネイティブプロジェクトですが、ビルドシステム、開発者の経験、利用可能な機能についてはいくつかの点で異なります。
今日現在、ExpoのSDKのAPIのほとんどはVanilla React Nativeプロジェクトでは使用できませんが、ExpoKitでは使用できます。これは将来変更される可能性があると思いますが、多くの作業が必要になります。
Expoのプッシュ通知サービスは、現在ExpoKitでも、Vanilla React Nativeでも動作しません。
Vanilla RNアプリとExpoKitアプリはどちらもXcodeとAndroid Studioを使用してネイティブコードをビルドします。 iOS ExpoKitアプリはCocoaPodsを使用して依存関係をインストールします。これにより、ネイティブビルドの管理が少し複雑になります。 Android ExpoKitアプリには、同じバイナリに複数のバージョンのReact Nativeをビルドするための追加のGradle構成があります(これは、複数のSDKバージョンのJSの無線アップデートを有効にするために使用されます)これにより、他のReactネイティブライブラリを追加する複雑さが増す場合があります。
ExpoKitとReact NativeプロジェクトのJavaScriptはMetroによって構築されますが、ExpoKitでは、プロジェクトの追加の構成を処理できるようにExpoのXDEまたはexpツールを使用してMetroを実行する必要があります。これは、exp start
ではなくreact-native run-Android
などのコマンドを実行することを意味します。
ExpoKitの現在の設計により(これは将来変更される可能性がありますが)、一部のオープンソースReactネイティブライブラリにはExpoKitとの互換性の問題がある場合があります。たとえば、ネイティブライブラリがAndroid上のReact NativeのOkHttpインスタンスへの参照を要求できると想定している場合、Expoが複数のバージョンを許可するために使用する名前空間によりReactコンパイルするネイティブ。とはいえ、これらの問題は非常にまれである傾向があり、ExpoKitがエコシステム内のライブラリとの互換性を高めるためのいくつかの異なる方法に取り組んでいます。
この複数バージョンのサポートは、ExpoKitバイナリが対応するVanilla React Nativeバイナリよりも大きくなる傾向があることも意味しますが、これは将来変更される可能性があります。
コメント1からの質問:ExpoKitビルドは必要に応じて変更できますが、編集の程度によっては、新しいSDKリリースへのアップグレードが少し難しくなる場合があります。