Mises en page d'applications communes Common React page Galerie

Dans cette série, vous apprendrez à utiliser React Native pour créer des mises en page couramment utilisées dans les applications mobiles. Les mises en page que vous créez ne seront pas fonctionnelles. L'objectif principal de cette série est de vous salir les mains lors de la mise en page du contenu de vos applications React Native.. 

Si vous débutez dans la présentation d'applications React Native ou dans le style en général, consultez mon tutoriel précédent:

Pour suivre cette série, je vous mets au défi d'essayer de recréer chaque écran par vous-même d'abord, avant de lire mes instructions détaillées dans le didacticiel. Vous ne bénéficierez pas vraiment de ce tutoriel simplement en le lisant! Essayez d'abord avant de chercher les réponses ici. Si vous parvenez à ressembler à l'écran d'origine, comparez votre implémentation à la mienne. Ensuite, décidez vous-même lequel est le meilleur!

Dans ce troisième article de la série, vous allez créer la page de galerie de photos suivante:

Les galeries sont souvent utilisées pour afficher une collection de contenus liés de manière à ne présenter que les informations nécessaires. La plupart du temps, il s'agit d'une photo, d'un titre et d'autres informations pertinentes..

Voici quelques exemples de ce type de mise en page utilisé à l'état sauvage:

Configuration du projet

La première étape consiste bien entendu à mettre en place un nouveau projet React Native:

réact-native init réag-native-common-screen

Une fois le projet configuré, ouvrez le index.android.js fichier et remplacez le code par défaut par ce qui suit:

importer Réagir, Composant de 'réagir'; importer AppRegistry de 'react-native'; importer la galerie de './src/pages/Gallery'; exporter la classe par défaut ReactNativeCommonScreens étend Component render () return (  )  AppRegistry.registerComponent ('ReactNativeCommonScreens', () => ReactNativeCommonScreens);

Créer un src / pages dossier et créer un Gallery.js déposer à l'intérieur.

Vous aurez aussi besoin du réagir-native-vector-icons paquet. Ceci est spécifiquement utilisé pour les icônes dans le pied de page.

npm install --save react-native-vector-icons

Ouvrez le android / app / build.gradle fichier et ajouter une référence au paquet:

dependencies // le reste des dépendances se trouvent ici dans le projet de compilation supérieur (': react-native-vector-icons') // add this

Faire la même chose avec le android / settings.gradle fichier en ajoutant ce qui suit en bas:

inclure le projet ': react-native-vector-icons' (': react-native-vector-icons'). projectDir = nouveau fichier (rootProject.projectDir, '… / node_modules / react-native-vector-icons / android')

Ouvrir android / app / src / main / java / com / react-natif-common-screens / MainApplication.java et importer le package:

importer java.util.Arrays; importer java.util.List; importer com.oblador.vectoricons.VectorIconsPackage; //Ajoute ça

Enfin, initialisez le paquet: 

@Override protected List getPackages () retourne des tableaux.asList (new MainReactPackage (), new VectorIconsPackage () // ajouter ceci); 

Création de la page de la galerie

Bon, maintenant que vous avez essayé de coder vous-même la mise en page (pas de triche, pas vrai?), Je vais vous montrer comment j'ai construit ma mise en oeuvre..

Contrairement aux deux pages précédentes, la page de la galerie nécessite des images qui lui serviront de contenu principal. Vous pouvez aller sur Google et rechercher des images ou télécharger les images depuis le dépôt GitHub. Toutes les images que j'ai utilisées sont étiquetées pour être réutilisées par leurs propriétaires respectifs. Vous pouvez donc les utiliser librement si vous le souhaitez. Une fois que vous avez les images, enregistrez-les dans le src / images annuaire. En raison de la manière dont les images seront disposées, elles doivent toutes avoir les mêmes dimensions..

Commencez par créer le fichier (src / pages / Gallery.js) et ajouter le code standard:

importer Réagir, Composant de 'réagir'; importer StyleSheet, View, ScrollView, Image, de 'react-native'; importer l'icône de 'react-native-vector-icons / FontAwesome'; bouton d'importation de '… / composants / Bouton'; export default class Gallery étend le composant …

Cette page a besoin d'un constructeur() fonction où vous définissez les chemins d'accès aux images que vous souhaitez utiliser. Dans React Native, vous faites référence aux images qui se trouvent dans votre répertoire de travail en les exigeant, comme vous le feriez avec un module JavaScript. Il est également important de noter que vous ne pouvez pas avoir de chemins d'image générés dynamiquement, vous devez donc fournir le chemin réel à la main..

constructeur (accessoires) super (accessoires); this.state = photos: [label: 'plage', src: require ('… /images/beach.jpg'), label: 'bridge', src: require ('… /images/bridge.jpg '), label:' champs ', src: require ('… /images/fields.jpg '), label:' montagnes ', src: require ('… /images/mountains.jpg '), label: 'tournesol', src: require ('… /images/sunflower.jpg'), label: 'coucher du soleil', src: require ('… /images/sunset.jpg'), label: ' lac ', src: require ('… /images/lake.jpg '), label:' nature ', src: require ('… /images/nature.jpg '), label:' pink ', src : require ('… /images/pink.jpg'), label: 'rails', src: require ('… /images/rails.jpg'),]; 

Vous n'avez pas vraiment besoin de les définir dans l'état car les valeurs ne changeront pas. Vous pouvez en fait les définir dans un fichier séparé, l'importer, l'assigner à une variable, puis l'utiliser directement. Mais par souci de simplicité, j’ai décidé de tout mettre dans l’état.

À l'intérieur de rendre() méthode, vous allez briser la tendance à tout envelopper dans un ScrollView composant, car le composant de tabulation situé dans la partie la plus basse de l'écran doit avoir une position fixe. Cela signifie que même si les photos dépassent la hauteur disponible, les onglets doivent rester en place. Pour ce faire, utilisez un Vue composant pour tout envelopper et seulement envelopper la collection de photos dans un ScrollView. Cela vous permet d'appliquer le défilement uniquement au conteneur de la collection de photos:

render () return (   this.renderGallery ()    ) 

Maintenant, vous pouvez commencer à voir un motif ici. Chaque fois que vous devez utiliser du code JavaScript dans le rendre() fonction, vous devez créer une fonction distincte pour contenir ce code, au lieu de le placer directement dans le rendre() une fonction. Cela le garde mince et propre.

Passons maintenant au style. Bien qu'un ScrollView n'est pas utilisé pour tout emballer cette fois, il est important de noter que vous devez toujours fournir flex: 1 au conteneur principal pour qu'il consomme la totalité de l'espace disponible.

conteneur: flex: 1, flexDirection: 'colonne', galerie: flexDirection: 'colonne', onglets: flexDirection: 'rangée', backgroundColor: '# 333', padding: 20, onglet: flex: 1, icône: textAlign: 'center',

le renderGallery () la fonction est très similaire à la renderWeeks () fonction que nous avons utilisée dans le tutoriel précédent, nous avons utilisé pour rendre une page de calendrier. Si vous souhaitez un rappel sur la façon dont cela fonctionne, allez-y et lisez le didacticiel précédent sur les pages de calendrier. Ce que vous devez savoir, c'est que resizeMode est appliqué à la Image. Dans ce cas, il est réglé sur couverture, ce qui permet à l’image d’occuper tout l’espace disponible de son conteneur tout en conservant son rapport de format. Cela se traduit par un léger agrandissement de l'image pour les appareils dotés d'écrans plus grands si l'image d'origine est plus petite.. 

renderGallery () var count = 0; var previous_item = "; var pairs = this.getPairsArray (this.state.photos); return pairs.map ((item, index) => return (     ) ); 

Ici se trouve le getPairsArray () une fonction:

getPairsArray (photos) var paires_r = []; var paires = []; var count = 0; photos.forEach ((item) => count + = 1; pairs.push (item); if (count == 2) pairs_r.push (pairs) count = 0; paires = [];); return pairs_r; 


Enfin, voici le style pour chaque rangée (article) et photo (photo). Notez l'utilisation de flex: 1 sur la photo réelle. Ceci est fait parce que le Image Le composant lui-même est son propre conteneur. Vous voulez que le conteneur lui-même occupe la moitié de l’espace disponible pour chaque ligne, c’est pourquoi un fléchir la propriété doit être attribuée. Si cela n’est pas fait, seules les dimensions requises par la photo seront utilisées et les resizeMode que vous avez ajouté plus tôt n'aura même pas d'effet.

item: flex: 1, flexDirection: 'rangée',, photo: flex: 1

Conclusion

C'est tout! Dans ce tutoriel, vous avez appris à implémenter la mise en page d'une page de galerie. Nous nous sommes concentrés sur la gestion des images pour la présentation de vos applications React Native. Souvent, vous devez utiliser une combinaison de fléchir et resizeMode afin de faire circuler les images comme vous le souhaitez. Comment ma solution s'est-elle comparée à la vôtre? Faites-nous savoir dans le forum de discussion ci-dessous.

Dans un prochain tutoriel, vous apprendrez à mettre en œuvre la disposition couramment utilisée dans les applications d'actualités. En attendant, consultez certains de nos autres tutoriels sur React Native et Flexbox!

  • Une introduction au module CSS Flexbox

    CSS, malgré son plafond de compétences relativement faible, semble toujours avoir un tueur en vedette dans sa manche. Rappelez-vous comment les requêtes des médias ont été réactives…
    Umar Hansa
    HTML et CSS
  • Commencez avec les mises en page natives de React

    Dans ce didacticiel, vous apprendrez à mettre en page les applications natives de React et à mettre en oeuvre des mises en page couramment utilisées dans les applications..
    Ancheta de Wern
    Réagir Natif
  • Construire une application sociale avec React Native

    React Native, créé par Facebook, vous permet d'écrire des applications mobiles natives en JavaScript moderne. Les applications natives de React seront transformées en vues natives spécifiques…
    Markus Mühlberger
    Réagir Natif
  • Comment construire une navigation par bandes avec Flexbox

    Souhaitez-vous améliorer vos connaissances en matière de Flexbox et apprendre en même temps à créer facilement une présentation attrayante et unique? Si oui, assurez-vous de lire ceci…
    George Martsoukos
    Flexbox
  • Animez votre application native React

    Les animations peuvent insuffler de la vie dans votre application et rendre vos interfaces utilisateur plus intuitives. Dans ce tutoriel, vous apprendrez à implémenter différents types d'animations dans…
    Ancheta de Wern
    Réagir Natif
  • Comment créer une application de détection de visage avec React Native

    Êtes-vous un développeur d'applications hybrides souhaitant inclure la détection des visages dans votre application, mais vous ne savez pas par où commencer? Pour commencer, vous pouvez lire An…
    Ancheta de Wern
    Réagir Natif