La réponse de Brent Vatne est très bien mais je voudrais ajouter quelques détails.
Expo étend la surface API de React Native
React Native ne vous fournit pas toutes les API JS dont vous avez besoin, mais uniquement les fonctionnalités les plus primitives. Les développeurs React Native devraient utiliser Android Studio / XCode pour lier des bibliothèques natives supplémentaires. Expo vise à améliorer RN et à fournir toutes les API JS dont vous avez besoin pour les besoins les plus courants. Il s'agit essentiellement d'un ensemble de bibliothèques natives de qualité bien définies déjà emballées pour vous dans une seule bibliothèque: ExpoKit. Parfois, ces bibliothèques existent déjà dans le monde RN et sont intégrées à ExpoKit.
Il est également important de noter que l'équipe d'Expo ne peut pas inclure chaque bibliothèque dans ExpoKit (ce qui peut créer une certaine frustration) car la taille de l'application Hello World augmenterait, car elle expédierait de nombreuses API qui ne seraient pas utilisées. dans la plupart des applications.
Expo fournit des mises à jour JS en direct
Comme d'autres systèmes (CodePush ...), Expo fournit un système pour mettre à jour votre application en direct. Cela signifie que vous téléchargez votre bundle JS sur un CDN et que les applications mobiles téléchargeront et utiliseront automatiquement le nouveau JS au prochain démarrage (sans demander de publication / révision dans les magasins).
Expo fournit un outil CLI pour télécharger / gérer les bundles JS sur leur CDN. Pour le développement, vous pouvez également choisir de devenir le CDN et d'héberger le bundle JS sur localhost. Et XDE est juste un wrapper visuel sur la CLI.
Expo fournit un client générique
Le client Expo est un client générique qui permet de charger n'importe quelle application compatible avec Expo. Toutes les applications Expo partagent le même runtime natif (RN + ExpoKit), la seule différence est le JS que nous leur donnons. Les applications Expo que vous publiez dans les magasins d'applications ont votre URL de bundle JS codée en dur. Le client Expo est construit d'une manière spécifique afin que vous puissiez choisir à partir de quelle URL charger le JS, en scannant un QRCode ou en fournissant une URL.
Notez que ce client peut également charger des bundles JS à partir de localhost, et rendre votre expérience de développement plus facile: pas besoin de XCode ou Android Studio, et il devient beaucoup plus rapide de faire fonctionner votre premier Hello World sur le téléphone (de quelques heures à quelques minutes). Vous pouvez réellement développer sur un iPhone sans Mac et la configuration prend 2 minutes.
En fait, comme l'Expo SDK peut être mis à niveau, le client Expo inclut une couche de compatibilité pour pouvoir exécuter les 5 dernières versions du SDK.
Expo fournit un service de construction
Comme toutes les applications Expo partagent le même code natif, Expo est en mesure de créer facilement ces applications pour vous. Ils ont créé un service de création de cloud.
La principale chose qui différencie 2 applications construites par Expo est simplement l'URL codée en dur sur laquelle l'application est censée télécharger le bundle JS pour fonctionner.
Expo fait d'autres choses pour vous, comme fournir un moyen déclaratif de configurer les icônes d'application, les orientations, les autorisations, les clés api, vous aider à configurer les notifications push, les profils d'approvisionnement ... de nombreux paramètres doivent être codés en dur au moment de la construction dans l'application et peuvent pas être changé sur l'air.
Expo est de réagir Native ce que Phonegap est à Cordoue
React Native est similaire à Cordova. Ce n'est pas la même technologie de vue (native vs webview) mais les deux vous permettent de contrôler les fonctionnalités natives à partir de javascript, et les deux offrent un système de plugins afin que les développeurs puissent facilement ajouter de nouvelles liaisons JS / natives.
PhoneGap est similaire à Expo. Ils essaient tous les deux d'enrichir l'API brute de la plate-forme sous-jacente sur laquelle ils sont construits avec un ensemble prédéfini de plugins natifs supplémentaires. PhoneGap propose également un service de build et dispose d'un client générique qui fonctionne tant que vous utilisez les plugins approuvés.
Conclusion
Comme vous pouvez le voir, Expo est un ensemble d'outils. Au final, il permet de développer, partager et publier facilement dans les magasins vos projets mobiles. C'est assez similaire à l'expérience PhoneGap (mais beaucoup mieux et moins déroutant).
Je recommanderai définitivement Expo pour tout nouveau projet greenfield React Native, à l'exception de ces 2 cas:
- Vous savez déjà que vous avez besoin d'API qui ne sont pas disponibles dans Expo et ne le seront pas de sitôt
- Vous vous souciez beaucoup de la taille de votre application (HelloWorld est> 25 Mo en raison de la grande taille d'ExpoKit, mais après cela, il n'augmente pas beaucoup car il ne s'agit que de JS)