J'ai fait beaucoup de recherches maintenant pour découvrir les différences exactes et les compromis entre un projet React Native, CRNA et un projet Expo).
Ma principale orientation était this
Cependant, je ne comprends toujours pas quels (dés) avantages j'utilise ExpoKit avec du code natif par rapport à un projet normal React Native avec du code natif, à part le fait que je ne peux pas utiliser API Expo dans un projet normal React Native.
Je sais que lorsque je démarre un projet dans Expo, je peux l'éjecter en tant que projet ExpoKit ou en tant que projet React Native. Dans les deux cas, je peux utiliser du code natif. Dans ExpoKit, je peux toujours utiliser les API Expo dans un React projet natif normal, je ne peux pas.
Alors mes questions:
Quel serait mon intérêt à utiliser un projet natif réactif si je peux utiliser du code natif et toutes les API Expo dans un projet ExpoKit? Dans un projet ExpoKit, je peux toujours utiliser toutes les API Expo et toutes les React API natives, non?!
Puis-je utiliser des API Expo dans un React projet natif si j'installe expo avec npm install --save expo
?
Quelle est la différence entre React API native et API Expo?
ExpoKit est une sorte d'hybride entre les applications Expo "pure JS" et "Vanilla" React Native. À la base, il s'agit toujours d'un projet React Native, mais certaines choses diffèrent sur le système de construction, l'expérience des développeurs et les fonctionnalités disponibles.
À ce jour, la plupart des API du SDK d'Expo ne sont pas disponibles dans un projet natif Vanilla React, mais elles sont disponibles dans ExpoKit. Nous pensons que cela pourrait changer à l'avenir, mais ce sera beaucoup de travail.
Le service de notification Push d'Expo ne fonctionne pas actuellement dans ExpoKit, ni pour Vanilla React Native.
Les applications Vanilla RN et les applications ExpoKit utilisent Xcode et Android Studio pour créer le code natif. Les applications iOS ExpoKit utilisent CocoaPods pour installer les dépendances, ce qui peut ajouter un peu de complexité à la gestion de la génération native. Android Les applications ExpoKit ont une configuration Gradle supplémentaire pour construire plusieurs versions de React Native dans le même binaire (ceci est utilisé pour permettre les mises à jour en direct de plusieurs versions SDK de JS), ce qui peut parfois augmenter la complexité de l'ajout d'autres bibliothèques natives React.
Le JavaScript pour un projet ExpoKit et React Native est construit par Metro, bien que dans ExpoKit vous devez exécuter Metro en utilisant les outils XDE ou exp d'Expo afin qu'ils puissent gérer une configuration supplémentaire pour le projet. Cela signifie que vous exécutez une commande comme exp start
Plutôt que react-native run-Android
.
En raison de la conception actuelle d'ExpoKit (bien que cela puisse changer à l'avenir), certaines bibliothèques natives open source React peuvent avoir des problèmes de compatibilité avec ExpoKit. Par exemple, si une bibliothèque native s'attend à pouvoir demander une référence à l'instance OkHttp de React Native sur Android, il peut y avoir une différence de type lors de l'exécution dans ExpoKit en raison de l'espace de noms utilisé par Expo pour autoriser plusieurs versions de React Native à compiler. Cela dit, ces problèmes ont tendance à être assez rares, et nous travaillons sur différentes manières pour qu'ExpoKit soit de plus en plus compatible avec les bibliothèques de l'écosystème.
Cette prise en charge multi-versions signifie également que les binaires ExpoKit ont tendance à être plus volumineux que les binaires natifs Vanilla React correspondants, bien que cela puisse changer à l'avenir.
Question du commentaire 1: Vous pouvez modifier la version d'ExpoKit comme vous le souhaitez, bien que cela puisse rendre la mise à niveau vers une nouvelle version du SDK légèrement plus difficile en fonction du niveau de modification.