Fermer

mai 4, 2020

Une introduction pour réagir avec Ionic


À propos de l'auteur

J'adore créer des logiciels pour le Web, écrire sur les technologies Web et jouer à des jeux vidéo.
En savoir plus sur
Jerry

Le développement d'applications mobiles utilisant des frameworks hybrides a parcouru un long chemin depuis la sortie initiale en 2008. Avec les améliorations apportées au moteur JavaScript et la puissance de traitement améliorée disponible pour les téléphones mobiles, la principale préoccupation des gens quand ils considéraient le développement de leurs applications en utilisant l'approche hybride – à savoir, les performances – a pratiquement été éliminé, et les frameworks multiplateformes ont connu une montée en popularité.

Nous allons créer une application mobile qui extrait les données du API Marvel Comics ; les données montreront les bandes dessinées de Marvel et vous pourrez choisir vos favoris. À la fin, nous allons créer une version native du projet sur Android.

Le Ionic Framework est une boîte à outils d'interface utilisateur open source pour créer des applications rapides et de haute qualité en utilisant des technologies Web avec des intégrations pour des frameworks populaires comme Angular et React. Ionic permet le développement multiplateforme à l'aide de Cordova ou de condensateur, ce dernier prenant en charge le développement d'applications de bureau à l'aide d'Electron.

Dans cet article, nous allons explorer Ionic avec l'intégration React en créant une application qui affiche des bandes dessinées en utilisant le API Marvel Comics et permet aux utilisateurs de créer une collection de leurs favoris. Nous apprendrons également comment intégrer des capacités natives dans notre application avec Condensateur et générer des versions pour une plate-forme native.

Si vous n'avez pas travaillé avec Ionic dans le passé, ou si vous êtes curieux de découvrir comment Ionic fonctionne avec React , ce didacticiel est pour vous.

Prérequis

Avant de pouvoir commencer à créer des applications avec Ionic Framework, vous aurez besoin des éléments suivants:

  • Node.js (au moins v10) installé sur votre ordinateur
  • fonctionnant connaissance de React
  • familiarité avec l'API Hooks
  • expérience avec TypeScript
  • un IDE natif, Android Studio pour Android ou XCode pour iOS
  • a Compte développeur Marvel avec une clé API. Vous pouvez en obtenir un ici

Voici une image de ce que nous allons construire:

 Application client Marvel comics
Application client Marvel comics ( Grand aperçu )

Installation Ionic CLI

Les applications Ionic sont créées et développées principalement via l'interface de ligne de commande Ionic (CLI). La CLI offre une large gamme d'outils de développement et d'options d'aide lors du développement de votre application hybride. Pour continuer avec ce guide, vous devrez vous assurer que la CLI est installée et accessible depuis votre terminal.

Ouvrez une nouvelle fenêtre de terminal et exécutez la commande suivante:

 npm install -g @ ionic / cli

Cela installera la dernière version de l'Ionic CLI et la rendra accessible de n'importe où sur votre ordinateur. Si vous souhaitez confirmer que l'installation a réussi, vous pouvez exécuter la commande suivante:

 ionic --version

Cette commande affichera la version Ionic installée sur votre ordinateur et elle devrait ressembler à ceci:

 6.4.1

Vous pouvez désormais amorcer des applications Ionic pour les intégrations de framework officiellement prises en charge – Angular et React – en utilisant l'un des modèles prédéfinis disponibles.

Démarrage d'une application Ionic React

La création d'une application Ionic React est facile à l'aide de la CLI. Il fournit une commande nommée start qui génère des fichiers pour un nouveau projet basé sur le framework JavaScript que vous sélectionnez. Vous pouvez également choisir de commencer avec un modèle d'interface utilisateur prédéfini au lieu de l'application vide par défaut «Hello world».

Pour commencer, exécutez la commande suivante:

 onglets ionic start marvel-client --type = react - -condensateur

Cette commande va créer une nouvelle application Ionic React en utilisant le modèle des onglets . Il ajoute également une intégration de condensateur à votre application. Capacitor est un moteur d'exécution multiplateforme qui facilite l'exécution d'applications Web en natif sur iOS, Android et sur le bureau.

Accédez à votre terminal vers le répertoire nouvellement créé et lancez le démarrage du serveur.

 cd marvel-client
service ionique

Pointez maintenant votre navigateur sur http: // localhost: 8100 pour voir votre application en cours d'exécution.

Remarque: Si vous avez utilisé create-react-app (CRA) auparavant, la structure de répertoires de votre projet actuel devrait vous sembler très familière. En effet, afin de garder l'expérience de développement familière, les projets Ionic React sont créés à l'aide d'une configuration similaire à celle trouvée dans une application CRA. React Router est également utilisé pour alimenter la navigation des applications sous le capot.

Création d'un composant React

Vous allez créer un composant React réutilisable à cette étape. Ce composant recevra des données et affichera des informations sur une bande dessinée. Cette étape vise également à démontrer que Ionic React n'est encore que React.

Supprimez les fichiers du composant ExploreContainer de src / components et supprimez ses importations des fichiers .tsx dans le répertoire src / pages .

 import React from 'react';
import {IonContent, IonHeader, IonPage, IonTitle, IonToolbar} à partir de '@ ionic / react'; 
 import ExploreContainer à partir de '../components/ExploreContainer' ;;19659041Import import' ./Tab1.css ';
const Tab1: React.FC = () => {
  revenir (
    
        ...
        
      
    
       Onglet 1 
    
  
   
 
    
  );
};
exporter Tab1 par défaut;

Dans votre fichier Tab1.tsx supprimez également le contenu de la balise .

Créez ensuite un fichier nommé ComicCard.tsx dans votre répertoire src / components . Ensuite, ouvrez le fichier dans votre éditeur et ajoutez le contenu suivant:

 import React, {FC} from 'react';
importer {Comic} depuis '../interfaces/comic';
importer {IonImg, IonCard, IonCardTitle, IonCardSubtitle, IonCardHeader} depuis '@ ionic / react';
type Props = {
    bande dessinée: bande dessinée;
}
const ComicCard: FC  = (accessoires): JSX.Element => {
    const {comic} = accessoires;
    revenir (
        
            
{comic.title}                 

{comic.series.name}                     

); } exporter la ComicCard par défaut;

Votre composant ComicCard reçoit les accessoires contenant les détails d'une bande dessinée et restitue les informations à l'aide d'un composant IonCard . Les cartes en Ionic sont généralement composées à l'aide d'autres sous-composants. Dans ce fichier, vous utilisez les composants IonCardTitle et IonCardSubtitle pour afficher le titre de la bande dessinée et les informations de série dans un composant IonCardHeader .

Consommation de l'API Marvel

Pour utiliser votre composant nouvellement créé, vous devez extraire des données de l'API Marvel. Aux fins de ce guide, vous allez utiliser le package axios pour effectuer vos requêtes HTTP. Vous pouvez l'installer en exécutant la commande suivante:

 yarn add axios

Ensuite, ajoutez le dossier suivant à votre répertoire src :

 # ~ / Desktop / marvel-client / src
mkdir -p services

Ensuite, cd dans le répertoire services et créez un fichier nommé api.ts :

 # ~ / Desktop / marvel-client / src /prestations de service
touch api.ts

Enfin, ouvrez le fichier et ajoutez le contenu suivant:

 import axios from 'axios';
importer {DataContainer} depuis '../interfaces/data-container';
importer {Comic} depuis '../interfaces/comic';
const API_KEY = '813xxxxxxxxxxxxxxxxxx';
const api = axios.create ({
    baseURL: 'https://gateway.marvel.com:443/v1/public',
    en-têtes: {
        'Content-Type': 'application / json',
    },
});
api.interceptors.response.use ((réponse) => {
    if (response.status === 200) {
        return response.data.data;
    }
});
fonction d'exportation getComics (): Promise <DataContainer > {
    return api.get ('/ comics', {
        params: {
            apikey: API_KEY,
            limite: 10,
            hasDigitalIssue: true,
        },
    });
}

Assurez-vous de remplacer la valeur de API_KEY par votre propre clé API. Si vous n'en avez pas, vous pouvez en demander un en vous inscrivant sur le site Web de Marvel d eveloper . Vous devez également configurer votre compte pour autoriser les demandes de votre serveur de développement local en ajoutant localhost * à votre liste de référents autorisés Marvel (voir l'image ci-dessous):

 Compte Marvel
Compte Marvel. ( Grand aperçu )

Vous avez maintenant une instance axios configurée pour utiliser l'API Marvel. Le fichier api.ts n'a qu'une seule exportation, qui atteint le point de terminaison GET / comics et renvoie une collection de bandes dessinées. Vous limitez les résultats à ceux qui sont disponibles numériquement. Vous allez maintenant utiliser le service API dans votre application.

Ouvrez le fichier Tab1.tsx et remplacez le contenu par ce qui suit:

 import React, {FC, useState, useEffect} de 'réagir';
importer {IonContent, IonHeader, IonPage, IonTitle, IonToolbar, IonSpinner, IonGrid, IonRow, IonCol} depuis '@ ionic / react';
import './Tab1.css';
importer ComicCard depuis '../components/ComicCard';
importer {Comic} depuis '../interfaces/comic';
import {getComics} de '../services/api';

const Tab1: FC = () => {
  const [comics, setComics] = useState (null as Comic [] | null);
  const [loading, setLoading] = useState (false);
  const fetchComics = () => {
    setLoading (true);
    getComics (). then ((response) => {
      if (response && response.results) {
        setComics (response.results);
      }
    }). Enfin (() => {
      setLoading (false);
    });
  };
  useEffect (() => {
    fetchComics ();
  }, [])
  revenir (
    
      
        
           Accueil 
        
      
      
         {(chargement) && (
          
)}         {(des bandes dessinées) && (            {comics.map ((bande dessinée) => (                  ))}              )}       
); }; exporter Tab1 par défaut;

Le fichier ci-dessus est un exemple de page en ionique. Les pages sont des composants accessibles avec une route / URL. Pour garantir le bon fonctionnement des transitions entre les pages, il est nécessaire que le composant IonPage soit le composant racine de votre page.

IonHeader est un composant censé exister en haut de une feuille. Il n'est pas requis pour toutes les pages, mais il peut contenir des composants utiles comme le titre de la page, le composant IonBackButton pour naviguer entre les pages ou le IonSearchBar . IonContent est la zone de contenu principale de vos pages. Il est chargé de fournir le contenu défilable avec lequel les utilisateurs interagiront, ainsi que tous les événements de défilement qui pourraient être utilisés dans votre application.

À l'intérieur de votre composant, vous avez une fonction appelée fetchComics () – appelée une fois à l'intérieur le crochet useEffect () – qui demande d'obtenir des bandes dessinées à partir de l'API Marvel en appelant la fonction getComics () que vous avez écrite plus tôt. Il enregistre les résultats dans l'état de votre composant via le crochet useState () . Le composant IonSpinner affiche une icône en rotation pendant que votre application envoie une demande à l'API. Une fois la demande terminée, vous transmettez les résultats au composant ComicCard que vous avez créé précédemment.

À ce stade, votre application devrait ressembler à ceci:

Page d'accueil de l'application. ( Grand aperçu )

À l'étape suivante, vous apprendrez à utiliser les plug-ins de condensateur dans votre application en activant le stockage hors ligne.

Création d'une collection personnelle de Marvel Comics

Votre application ressemble bon jusqu'à présent, mais il n'est pas très utile comme application mobile . Dans cette étape, vous allez étendre les fonctionnalités de votre application en permettant aux utilisateurs de «mettre en vedette» des bandes dessinées ou de les enregistrer en tant que favoris. Vous pourrez également rendre des informations sur les favoris enregistrés disponibles pour les visualiser hors ligne en utilisant le plugin de stockage de condensateur.

Je suis un grand fan de The Collector. ( Grand aperçu )

Tout d'abord, créez un fichier nommé util.ts dans votre répertoire src :

 # ~ / Desktop / marvel-client / src
touch util.ts

Maintenant, ouvrez le fichier et collez le contenu suivant:

 importez {Plugins} depuis '@ capacitor / core';
importer {Comic} depuis './interfaces/comic';

const {Storage, Toast} = Plugins;

export const constFavourites = async (comic: Comic): Promise  => {
    const sauvé = attendre Storage.get ({clé: 'savedFavourites'});
    favoris const: bande dessinée [] | null = (enregistré && enregistré.valeur)
        ? JSON.parse (saved.value)
        : nul;

    si (! favoris) {
        const comics = [comic];
        attendre Storage.set ({
            key: 'savedFavourites',
            valeur: JSON.stringify (bandes dessinées),
        });
        retourner Toast.show ({
            texte: "Ajouté aux favoris",
        });
    }

    const copyOfFavourites = favourites.slice ();
    const {id} = bande dessinée;
    const isSavedIndex = copyOfFavourites.findIndex ((c) => c.id === id);

    if (isSavedIndex! == -1) {
        copyOfFavourites.splice (isSavedIndex, 1);
        attendre Storage.set ({
            key: 'savedFavourites',
            valeur: JSON.stringify (copyOfFavourites),
        });
        retourner Toast.show ({
            texte: "Supprimé des favoris",
        });
    } autre {
        copyOfFavourites.unshift (bande dessinée);
        attendre Storage.set ({
            key: 'savedFavourites',
            valeur: JSON.stringify (copyOfFavourites),
        });
        retourner Toast.show ({
            texte: "Ajouté aux favoris",
        });
    }
};

export const getFavourites = async (): Promise  => {
    const enregistré = attendre Storage.get ({
        key: 'savedFavourites',
    });
    return (sauvé && sauvegardé.valeur)
        ? JSON.parse (saved.value)
        : nul;
};

export const checkFavourite = async (id: number): Promise  => {
    const enregistré = attendre Storage.get ({
        key: 'savedFavourites',
    });
    favoris const: bande dessinée [] | null = (enregistré && enregistré.valeur)
        ? JSON.parse (saved.value)
        : nul;
    si (favoris) {
        const isSavedIndex = favourites.findIndex ((c) => c.id === id);
        if (isSavedIndex! == -1) {
            return true;
        }
    }
    retour faux;
};
 

Le plug-in de stockage fournit un magasin de valeurs-clés pour les données simples, tandis que le plug-in Toast fournit une fenêtre contextuelle de notification pour afficher des informations importantes pour un utilisateur.

Le updateFavourites () La fonction dans ce fichier prend un seul argument, un objet Comic et l'ajoute au stockage de l'appareil s'il n'existe pas, ou le supprime du stockage de l'appareil s'il a déjà été enregistré. getFavourites () renvoie les bandes dessinées enregistrées de l'utilisateur, tandis que checkFavourites () accepte un seul argument, un ID de ressource Comic et le recherche dans les bandes dessinées enregistrées, renvoyant vrai s'il existe, ou faux sinon.

Ensuite, ouvrez le fichier ComicCard.tsx et apportez les modifications suivantes pour permettre aux utilisateurs de votre application de enregistrer leurs bandes dessinées préférées:

 importer {star, starOutline} depuis 'ionicons / icons';
importer * en tant qu'utils depuis '../util';;19659041
    bande dessinée: bande dessinée;
}
const ComicCard: FC  = (accessoires): JSX.Element => {
    const {comic} = props; 
 const [isFavourite, setIsFavourite] = useState (false);
    const checkFavourite = (): void => {
        utils.checkFavourite (comic.id) .then ((valeur: booléen) => {
            setIsFavourite (valeur);
        });
    }

    useEffect (() => {
        checkFavourite ();
    }); 
 return (
        
            ...
            
                ...
             
 
                 {
                        utils.updateFavourites (comic) .finally (() => {
                            checkFavourite ();
                        });
                    }}
                >
                    
                    {(isFavourite)
                        ? 'Retirer'
                        : 'Ajouter'
                    }
                
             
 
    );
}

Votre composant ComicCard possède désormais un composant IonButton qui, lorsque vous cliquez dessus, appelle la fonction updateFavourites () que vous avez écrite plus tôt. N'oubliez pas que la fonction agit comme une bascule, supprimant la bande dessinée si elle a déjà été enregistrée, ou bien l'enregistrant. N'oubliez pas d'ajouter les importations des nouveaux composants ioniques, IonButton IonCardContent et IonIcon qui viennent d'être ajoutés à ce composant.

Maintenant pour le dernière partie de cette étape, où vous allez rendre les bandes dessinées enregistrées dans leur propre page. Remplacez le contenu du fichier Tab2.tsx par ce qui suit:

 import React, {useState} de 'react';
import {IonContent, IonHeader, IonPage, IonTitle, IonToolbar, IonGrid, IonRow, IonCol, useIonViewWillEnter} depuis '@ ionic / react';
import './Tab2.css';
importer {Comic} depuis '../interfaces/comic';
import {getFavourites} de '../util';
importer ComicCard depuis '../components/ComicCard';

const Tab2: React.FC = () => {
  const [comics, setComics] = useState (null as Comic [] | null);

  const loadComics = (): void => {
    getFavourites (). then ((result) => {
      if (résultat) {
        setComics (résultat);
      }
    })
  };

  useIonViewWillEnter (() => {
    loadComics ();
  });

  revenir (
    
      
        
           Favoris 
        
      
      
         {(bandes dessinées) && (
          
            
               {comics.map ((bande dessinée) => (
                
                  
                
              ))}
            
          
        )}
      
    
  );
};
exporter Tab2 par défaut;

Cette page est assez similaire à la page Tab1 mais, au lieu de faire une demande d'API pour obtenir des bandes dessinées, vous accédez à des données enregistrées localement. Vous utilisez également le crochet du cycle de vie ionique, useIonViewWillEnter () au lieu d'un crochet useEffect () pour appeler la fonction qui lit les bandes dessinées enregistrées et met à jour l'état du composant . Le crochet useIonViewWillEnter () est appelé au moment où la page en cours de navigation entre en vue.

Votre application utilise maintenant quelques plugins natifs pour améliorer ses fonctionnalités. À l'étape suivante, vous apprendrez à générer un projet natif pour Android et à créer une application native à l'aide d'Android Studio.

Remarque: vous pouvez supprimer les fichiers liés à * Tab3 * et supprimer l'importation et le composant * IonTab * dans le fichier * App.tsx * .

Génération d'un projet natif

Ionic est fourni avec la prise en charge des exécutions d'applications multiplateformes tels que Condensateur et Cordova. Ces frameworks vous aident à créer et exécuter des applications développées à l'aide d'Ionic sur un appareil ou un émulateur natif. Aux fins de ce guide, vous utiliserez Capacitor pour générer des fichiers de projet natifs.

Avant de procéder à l'ajout d'une plate-forme, vous devrez générer une version de production de votre application. Exécutez la commande suivante dans le répertoire racine de votre projet pour ce faire:

 build ionique

Ajoutons maintenant le condensateur à votre projet et générons les ressources nécessaires pour créer une application native. Le condensateur fournit une CLI accessible dans votre projet à l'aide de npx ou de la ionic CLI comme illustré ci-dessous:

Utilisation de npx

 npx cap add android

Cette commande ajoute la plate-forme android à votre projet. D'autres valeurs de plate-forme possibles sont électron et électron .

Utilisation de ionique

Depuis que vous avez initialisé votre projet en utilisant le drapeau - condensateur plus tôt , Le condensateur a déjà été initialisé avec les informations de votre projet. Vous pouvez procéder à l'ajout d'une plate-forme en exécutant la commande suivante:

 condensateur ionique add android

Cette commande installera les dépendances requises pour la plate-forme android . Il générera également les fichiers requis pour un projet Android natif et copiera les ressources que vous avez créées précédemment lors de l'exécution de build ionique .

Si vous avez installé Android Studio vous pouvez maintenant ouvrir votre projet dans Android Studio en exécutant:

 condensateur ionique ouvert android

Enfin, construisez votre projet:

Générez un APK. ( Grand aperçu )

Conclusion

Dans ce guide, vous avez appris à développer des applications mobiles hybrides à l'aide de l'intégration React de Ionic Framework. Vous avez également appris à utiliser Capacitor pour créer des applications natives, en particulier pour la plate-forme Android. Consultez la documentation de l'API car il existe de nombreux autres composants d'interface utilisateur disponibles pour être utilisés dans les applications Ionic que nous n'avons pas explorées. Vous pouvez trouver le code sur GitHub .

Références

 Smashing Editorial (ks, ra, yk, il, og)




Source link