Découverte de React Native, création d'un Pokédex

Découverte de React Native, création d'un Pokédex

Bref Résumé

Cette vidéo est un tutoriel complet sur React Native, démontrant comment créer une application mobile de listage de Pokémon. Elle couvre l'installation, la structure du projet, les composants de base, la navigation, la traduction d'un design system, l'utilisation d'APIs, l'animation, et la lecture de sons.

  • Installation et configuration de l'environnement React Native avec Expo.
  • Création d'une interface utilisateur native en utilisant les composants View et Text.
  • Implémentation de la navigation entre les écrans et la gestion des paramètres de route.
  • Utilisation de React Query pour la gestion des données asynchrones et la pagination infinie.
  • Application de React Native Reanimated pour créer des animations fluides et performantes.

Introduction

La vidéo présente la création d'une application React Native pour lister des Pokémon, en utilisant une maquette Figma et l'API PokéAPI. L'application comprendra une liste de Pokémon avec un système de filtre et d'organisation, ainsi qu'une page de détails pour chaque Pokémon avec la possibilité d'écouter son cri. La vidéo est chapitrée pour faciliter la navigation et permettre aux spectateurs de se concentrer sur les parties qui les intéressent le plus. React Native est présenté comme un outil permettant de créer des applications mobiles natives avec un moteur JavaScript et des composants natifs propres au téléphone.

Installation

Pour commencer avec React Native, il est recommandé d'utiliser Expo, un framework qui simplifie le développement. La commande npx create-expo-app permet d'initialiser un nouveau projet. Il est possible de tester l'application sur un téléphone physique en utilisant l'application Expo Go, disponible sur iOS et Android, qui permet de charger et d'exécuter le code de l'application à distance. Pour un retour visuel direct sur l'ordinateur, il est possible d'installer un simulateur Android via Android Studio.

Installation du simulateur Android

Pour installer un simulateur Android, il faut télécharger et installer Android Studio. Lors de l'installation, il est important de sélectionner l'option "Android Virtual Device". Une fois Android Studio installé, il faut utiliser le Virtual Device Manager pour créer un nouveau périphérique virtuel, en choisissant un type de périphérique (par exemple, Pixel 7) et une API Android. Le périphérique virtuel peut ensuite être lancé, et l'application React Native peut être exécutée sur ce périphérique en utilisant la commande npm run android.

Découverte de la structure

La structure de base d'une application React Native créée avec Expo comprend un dossier app contenant les routes basées sur les fichiers, un dossier components pour les composants réutilisables, un dossier assets pour les ressources, et un fichier app.json pour les informations de l'application. La commande npm run reset-project permet de réinitialiser le projet à un code source minimal.

Eléments de bases (View et Text)

Les blocs de construction de base dans React Native sont les composants View et Text. Le composant View est similaire à une div en HTML et permet d'englober des éléments. Le composant Text est utilisé pour afficher du texte. Il est obligatoire d'utiliser le composant Text pour afficher du texte. Le style des éléments peut être défini en utilisant la propriété style, qui accepte un objet contenant des propriétés CSS-like. L'objet StyleSheet de React Native permet de créer des styles avec autocomplétion et validation.

Navigation

La navigation dans React Native avec Expo Router est basée sur la structure des fichiers dans le dossier app. Chaque fichier représente une route. Le composant Link permet de créer des liens vers d'autres pages. Pour créer des routes avec des paramètres, il faut créer un dossier avec le nom du paramètre entre crochets (par exemple, [id]). Le hook useLocalSearchParams permet de récupérer les paramètres de la route. L'option headerShown: false dans le fichier layout.tsx permet de masquer l'en-tête de navigation. Le composant SafeAreaView permet d'éviter que le contenu ne soit masqué par les éléments de l'interface utilisateur du téléphone. La propriété flex: 1 permet à un élément de prendre tout l'espace disponible.

Traduction du design system

Pour traduire le design system de la maquette Figma, il est recommandé de créer un composant ThemedText qui prend en charge les différentes variantes de typographie et les couleurs définies dans le design system. Les variantes de typographie sont définies dans un objet StyleSheet, et les couleurs sont définies dans un fichier colors.ts qui gère les modes clair et sombre. Un hook useThemeColors permet de récupérer les couleurs en fonction du thème actuel. Un composant Card est également créé pour gérer les cartes utilisées dans l'application, avec une gestion spécifique des ombres portées pour iOS et Android.

Ecran de listing

Pour créer l'écran de listing des Pokémon, il faut d'abord afficher l'en-tête avec le logo et le titre. Le composant Image permet d'afficher des images locales en utilisant la fonction require. Le composant FlatList permet d'afficher une liste d'éléments de manière performante. Il prend en paramètres les données à afficher, une fonction pour rendre chaque élément, et une fonction pour extraire la clé de chaque élément. La propriété numColumns permet de définir le nombre de colonnes de la liste. Les propriétés columnWrapperStyle et contentContainerStyle permettent de styliser la liste.

Le composant PokemonCard

Le composant PokemonCard est créé pour afficher les informations de chaque Pokémon dans la liste. Il prend en paramètres l'ID et le nom du Pokémon. L'URL de l'image du Pokémon est construite en utilisant l'ID du Pokémon et l'API PokéAPI. Le composant Link est utilisé pour rendre la carte cliquable et naviguer vers la page de détails du Pokémon. Le composant Pressable est utilisé pour ajouter un effet visuel lors du clic sur la carte.

Utilisation de l'API

Pour récupérer les informations des Pokémon depuis l'API PokéAPI, la librairie React Query est utilisée. Un hook useFetchQuery est créé pour encapsuler la logique de récupération des données et de gestion du cache. Ce hook prend en paramètre l'URL de l'API et retourne les données récupérées. Il simule également un loader pour afficher un indicateur de chargement pendant la récupération des données.

Liste

Pour implémenter la pagination infinie, le hook useInfiniteQuery de React Query est utilisé. Ce hook permet de charger les données de manière progressive au fur et à mesure que l'utilisateur scrolle vers le bas de la liste. La propriété onEndReached du composant FlatList est utilisée pour détecter lorsque l'utilisateur atteint la fin de la liste et déclencher le chargement de nouvelles données. Un typage plus précis est ajouté au hook useFetchQuery pour améliorer l'autocomplétion et la sécurité du code.

Formulaire de recherche

Un composant SearchBar est créé pour permettre à l'utilisateur de rechercher des Pokémon. Ce composant utilise un TextInput pour récupérer la saisie de l'utilisateur et met à jour un état local avec la valeur de la recherche. La liste des Pokémon est filtrée en fonction de la valeur de la recherche. Un composant SortButton est créé pour permettre à l'utilisateur de trier les Pokémon par ID ou par nom. Un composant Row est créé pour simplifier la création de lignes d'éléments. Un composant Modal est utilisé pour afficher une boîte de dialogue modale avec les options de tri.

Gestion de l'ordre

Un composant SortButton est créé pour gérer l'ordre d'affichage des Pokémon. Il utilise une modal pour afficher les options de tri (par ID ou par nom). Les icônes de tri sont exportées depuis la maquette Figma. Le composant Pressable est utilisé pour rendre les options de tri cliquables. Un hook useRef est utilisé pour mesurer la position du bouton de tri et positionner la modal en conséquence. La librairie Dimensions de React Native est utilisée pour obtenir la taille de l'écran.

Ecran détail du pokemon

Un composant RootView est créé pour encapsuler la logique de style de base de l'application. Le composant PokemonView est créé pour afficher les détails d'un Pokémon. Il utilise l'API PokéAPI pour récupérer les informations du Pokémon. Une image de fond est ajoutée à l'écran de détails. Un composant PokemonSpec est créé pour afficher les spécifications du Pokémon (poids, taille, etc.). Une fonction est créée pour formater le poids et la taille du Pokémon. Un second appel HTTP est effectué pour récupérer la description du Pokémon.

Stats du pokemon

Un composant PokemonStat est créé pour afficher les statistiques du Pokémon. Ce composant affiche le nom de la statistique, sa valeur, et une barre de progression. Une fonction est créée pour raccourcir le nom des statistiques. Les statistiques sont affichées en utilisant une boucle sur les données récupérées depuis l'API.

Animer avec React Native Reanimated

React Native Reanimated est utilisé pour animer la couleur de fond de l'écran de détails. Une valeur partagée est créée pour gérer la progression de l'animation. La fonction interpolateColor est utilisée pour interpoler entre la couleur de teinte et la couleur de fond. La fonction withTiming est utilisée pour créer une animation de type "timing". Un useEffect est utilisé pour déclencher l'animation lorsque la couleur de fond change. Des statistiques par défaut sont utilisées pour éviter les problèmes de relayout pendant le chargement des données.

Lecture de sons

La librairie Expo AV est utilisée pour lire le cri du Pokémon lorsque l'utilisateur clique sur l'image. La fonction Audio.Sound.createAsync est utilisée pour charger le son depuis l'URL de l'API. La fonction sound.playAsync est utilisée pour lancer la lecture du son.

Navigation au swipe

La librairie react-native-pager-view est utilisée pour permettre à l'utilisateur de passer d'un Pokémon à l'autre en swipant. Ce composant affiche trois pages : le Pokémon précédent, le Pokémon actuel, et le Pokémon suivant. Les événements onPageSelected et onPageScrollStateChanged sont utilisés pour détecter lorsque l'utilisateur change de page et mettre à jour l'ID du Pokémon en conséquence. Une référence est utilisée pour contrôler le pager à distance et revenir à la page centrale après chaque swipe. Des conditions sont ajoutées pour éviter les problèmes de navigation aux extrémités de la liste des Pokémon.

Navigation

Les flèches de navigation sont mises à jour pour utiliser les fonctions de navigation du pager. Des conditions sont ajoutées pour masquer les flèches de navigation aux extrémités de la liste des Pokémon.

Build

La vidéo évoque rapidement la partie build de l'application en utilisant EAS, le service de build d'Expo. EAS permet de construire l'application pour iOS et Android depuis le Cloud. Il est nécessaire de modifier le fichier app.json pour configurer les permissions, le splash screen, et d'autres paramètres de l'application.

Conclusion

La vidéo conclut en félicitant les spectateurs qui sont arrivés jusqu'à la fin et en encourageant à poser des questions et à donner des suggestions pour de futurs tutoriels. Elle souligne que React Native n'est pas si compliqué si on connaît déjà React, et qu'il existe des librairies de composants pour simplifier le développement.

Watch the Video

Share

Stay Informed with Quality Articles

Discover curated summaries and insights from across the web. Save time while staying informed.

© 2024 BriefRead