Présentations d'applications natives Common React Fil d'actualité

Bienvenue dans cette série, dans laquelle 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 dernier tutoriel de la série, vous allez créer la page de flux d'actualités suivante:

Les présentations de fil d'actualité sont utilisées pour présenter les informations de manière à ce qu'elles puissent être facilement analysées. La plupart du temps, il est présenté sous forme de liste avec le titre, l'extrait et éventuellement une image d'aperçu représentant chaque nouvelle.. 

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 des nouvelles de './src/pages/News'; 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 News.js déposer à l'intérieur.

Vous aurez aussi besoin du réagir-native-vector-icons paquet. Ceci est spécifiquement utilisé pour l'icône de retour dans l'en-tête.

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éer la page de nouvelles

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 mon implémentation..

Vous devez avoir remarqué la tendance maintenant. Je les ai classés par difficulté, ou du moins par difficulté. Donc, cet écran final est fondamentalement le grand patron parmi les autres écrans que vous avez créés jusqu'à présent. Ne vous inquiétez pas, car je vous guiderai toujours pas à pas..

Vous aurez besoin de quelques images pour l'aperçu de chaque article. J'ai ajouté quelques images dans le référentiel que vous pouvez utiliser si vous le souhaitez..

Commencez par ajouter le code passe-partout: 

importer Réagir, Composant de 'réagir'; importer StyleSheet, Text, View, ScrollView, Image de 'react-native'; importer l'icône de 'react-native-vector-icons / FontAwesome'; bouton d'importation de '… / composants / Bouton'; importer NewsItem de '… / components / NewsItem';

Cette fois, il y a un nouveau composant nommé NewsItem (src / components / NewsItem). Comme son nom l'indique, il est utilisé pour rendre chaque article d'actualité. Nous y reviendrons plus tard, mais jetons d'abord un coup d'œil au constructeur() une fonction. Tout comme l'écran de la galerie précédemment, cela utilise l'état pour stocker la source de données pour les nouvelles. Les titres et les résumés proviennent du New York Times, mais les images proviennent de Google Images (et sont étiquetées pour être réutilisées par leurs propriétaires respectifs)..

constructeur (accessoires) super (accessoires); this.state = news_items: [prétexte: "Matière grise", titre: "L'art vous rend intelligent", résumé: "Les visites de musées augmentent les scores aux tests, génèrent une responsabilité sociale et augmentent l'appréciation des arts par les étudiants.", image: require ('… /images/pink.jpg'),, prétexte: ", titre:" Tensions et défauts avant le crash du site Web pour la santé ", résumé:" Les entretiens et les documents offrent de nouveaux détails sur la manière dont le déploiement du président Obama " programme de signature s transformé en une humiliation majeure. ', image: require ('… /images/beach.jpg '), prétexte: ", titre:" 36 heures à Charleston, SC ", résumé:" Les foules sont plus minces et Les températures sont clémentes en hiver dans cette… ', image: require ('… /images/rails.jpg '),]; 

Le contenu est divisé en trois parties: l'en-tête, le texte de l'instruction et les nouvelles. L'en-tête est très similaire à l'en-tête de l'écran du calendrier précédent; la seule différence est qu'au lieu de trois, il n'y a que deux éléments visibles. (Si vous souhaitez un rappel sur la manière dont l'écran du calendrier a été créé, continuez et relisez ce tutoriel.) 

Je dis "visible" car il y a en fait trois éléments - le dernier est juste caché! Cela permet de centrer facilement le texte au milieu. Si vous n'avez que deux éléments dans l'en-tête, il est difficile de comprendre comment diviser l'espace entre les deux éléments tout en maintenant celui du milieu centré. Mais si vous avez trois éléments, chacun peut avoir le même fléchir valeur, et vous pouvez simplement utiliser textAlign pour positionner du texte ou alignItems positionner Vue Composants.

render () return (     La plupart des e-mailés     SWIPE À TRAVERS LES SECTIONS   this.renderNews ()   ) 

le renderNews () fonction est celle qui parcourt tous les articles d’actualité de l’état et les rend en utilisant le NewsItem composant.

renderNews () return this.state.news_items.map ((news, index) => return  ); 

La prochaine étape est le code pour le NewsItem composant. Commencez par ajouter le code du composant Reaplic de boilerplate. Comme vous l'avez vu précédemment, ce composant accepte la cléindice, et nouvelles comme ses accessoires. Vous avez seulement besoin du indice et nouvellesclé C’est juste la façon dont React Native identifie de manière unique chaque ligne d’une liste. Vous devez le fournir chaque fois que vous utilisez Array.map pour le rendu; sinon, il va se plaindre. 

Lorsque vous utilisez des composants fonctionnels, les accessoires sont transmis sous forme d'argument unique. Ci-dessous, les accessoires individuels sont extraits à l'aide d'une affectation de déstructuration, afin news, index extrait essentiellement le nouvelles et indice propriétés des accessoires. De là, vous pouvez obtenir le nombre à restituer.

importer Réagir, Composant de 'réagir'; importer StyleSheet, Text, View, Image de 'react-native'; bouton d'importation de './Button'; const NewsItem = (news, index) => let nombre = (index + 1) .toString (); revenir (… ); 

Si vous regardez la capture d'écran précédente, vous pouvez voir que chaque nouvelle peut être divisée en deux groupes: un qui affiche le texte de la nouvelle (numéro, titre et extrait) et un qui affiche l'image principale.. 

Cela résout le problème de l’image caractéristique car ce n’est qu’un élément. Mais pour le texte d'actualité, vous devez encore le diviser davantage. Comme vous l'avez peut-être remarqué, le numéro se trouve dans la même position, même si le titre a un prétexte (par exemple, "Matière grise"). Le prétexte a également un style différent du titre et du numéro. 

En utilisant ces connaissances, vous pouvez en déduire que le nombre, le prétexte et le titre ne doivent pas être regroupés dans un même conteneur. En outre, le prétexte, le titre et l’extrait donnent l’impression qu’ils sont empilés verticalement pour que vous puissiez les placer dans un seul conteneur. Seul le nombre doit être mis en évidence. Avec cela, vous arriverez avec le balisage suivant:

le getPretext () fonction vous permet de rendre conditionnellement un Texte composant uniquement lorsqu'un article a un prétexte.

fonction getPretext (news) if (news.pretext) return ( news.pretext ) 

Ici se trouve le onPress une fonction. Tout ce qu'il fait, c'est alerter le titre de l'actualité, mais dans une application réelle, vous devez accéder à l'article:

fonction onPress (news) alert (news.title); 

À ce stade, la page ressemblera à ceci:

Maintenant, ajoutez les styles suivants à la page Actualités:

const styles = StyleSheet.create (conteneur: flex: 1, en-tête: flexDirection: 'rangée', couleur d'arrière-plan: '#FFF', remplissage: 20, justificationContenu: 'espace-entre', borderBottomColor: '# E1E1E1' , borderBottomWidth: 1, header_button: flex: 1,, espaces: flex: 1, back_button: flexDirection: 'rangée', alignItems: 'center', libellé de back_button: color: '# 397CA9', fontSize : 20,, instruction: alignSelf: 'center', marginTop: 5, instruction_text: color: '# A3A3A3', header_text: flex: 1, alignSelf: 'center', header_text_label: fontSize: 20 , textAlign: 'center', news_container: flex: 1, flexDirection: 'column',);

Je ne vous expliquerai plus ce que fait chaque ligne de code, car elle applique les mêmes concepts que ceux que vous avez appris dans les tutoriels précédents de cette série. Voici à quoi ressemblera la page une fois les styles ci-dessus appliqués:

Ensuite, ajoutez les styles pour chaque nouvelle. Chaque news_item a un flexDirection de rangée afin que le texte d'actualités et l'image sélectionnée soient tous sur une seule ligne. news_text occupe les deux tiers de l’espace disponible, tandis que news_photo occupe l'espace restant.

const styles = StyleSheet.create (news_item: flex: 1, flexDirection: 'row', paddingRight: 20, paddingLeft: 20, paddingTop: 30, paddingBottom: 30, borderBottomWidth: 1, borderBottomColor: '# E4E4E4', news_text : flex: 2, flexDirection: 'row', padding: 10,);

Ensuite, vous devez ajouter le style pour résoudre le problème du chevauchement du texte avec l’image d’aperçu. Vous pouvez le faire en assignant un fléchir valeur pour les enfants du news_text. UNE fléchir la valeur a déjà été attribuée à news_text, mais depuis Vue a été utilisé à l'intérieur, vous devez également attribuer un fléchir valeur à ceux afin qu'ils ne vont pas sur les limites de leur parent Vue

Nous attribuerons une valeur de flex de 0.5 au nombre, tandis que text_container aura une valeur de 3. Avec ces valeurs, le text_container occupera six fois plus d'espace que le nombre.

nombre: flex: 0.5,, text_container: flex: 3,

Il ne vous reste plus qu'à ajouter les touches finales pour styliser le texte:

prétexte: color: '# 3F3F3F', fontSize: 20, titre: fontSize: 28, fontWeight: 'bold', couleur: '# 000', fontFamily: 'georgia', news_photo: flex: 1, justification : 'center', alignItems: 'center', photo: width: 120, height: 120

Et n'oubliez pas d'exporter le composant!

export default NewsItem;

Dernières pensées

C'est tout! Dans cette dernière partie de cette série, vous avez appris à mettre en œuvre la mise en page couramment utilisée dans les pages d’information. Ce tutoriel a rassemblé toutes les choses que vous avez apprises dans les parties précédentes de la série. Vous avez utilisé les deux flexDirection: 'ligne' et flexDirection: 'colonne' pour compléter les styles pour chaque nouvelle. Vous avez également utilisé vos connaissances pour aligner des images sur l'aperçu..

Si vous avez essayé d'implémenter vous-même ces mises en page, échoué, puis de nouveau essayé, vous devriez déjà avoir suffisamment de compétences pour implémenter tout type de mise en page. Vous pouvez appliquer ce que vous avez appris ici pour mettre en œuvre même les dispositions complexes que vous voyez couramment dans les applications populaires. Si vous voulez plus de pratique, essayez de recréer les mises en page que vous voyez dans les applications populaires telles que Facebook ou YouTube.. 

Comment ma solution s'est-elle comparée à la vôtre? Faites-nous savoir dans le forum de discussion ci-dessous. Et 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