Reacțiile comune de reacție a aplicațiilor native fluxul de știri

Bine ați venit în această serie, în care învățați cum să utilizați React Native pentru a crea machete de pagini utilizate în mod obișnuit în aplicațiile mobile. Modelele pe care le creați nu vor fi funcționale - în schimb, principalul obiectiv al acestei serii este de a vă împiedica mâinile în a pune conținut în aplicațiile dvs. Reactive Native. 

Dacă sunteți nou în a stabili aplicații Reactive Native sau stil în general, consultați tutorialul meu anterior:

Pentru a urmări împreună cu această serie, vă provoc să încercați să creați mai întâi fiecare ecran în parte, înainte de a citi instrucțiunile pas cu pas ale tutorialului. Nu veți beneficia cu adevărat de mult din acest tutorial doar dacă ați citit-o! Încercați mai întâi înainte de a căuta răspunsurile aici. Dacă reușiți să faceți ca aspectul ecranului original, comparați implementarea cu a mea. Apoi decideți pentru voi cine este unul mai bun!

În acest tutorial final al seriei, veți crea următoarea pagină de fluxuri de știri:

Actualizările feedurilor de știri sunt folosite pentru a prezenta informații astfel încât să poată fi ușor scanate. De cele mai multe ori este prezentat într-un format de listă cu titlul, fragmentul și opțional o imagine de previzualizare care reprezintă fiecare element de știri. 

Iată câteva exemple de acest tip de aspect utilizat în sălbăticie:

Setarea proiectului

Primul pas, desigur, este crearea unui nou proiect React Native:

react-nativi reacționează-native-ecrane comune

Odată ce proiectul este setat, deschideți index.android.js fișier și înlocuiți codul implicit cu următoarele:

import React, Component de la "reacție"; import AppRegistry de la "reactive-native"; import Știri din "./src/pages/News"; clasa implicită pentru export ReactNativeCommonScreens extinde Component render () return (  );  AppRegistry.registerComponent ("ReactNativeCommonScreens", () => ReactNativeCommonScreens);

Creeaza o src / pagini și creați un News.js dosar în interiorul acestuia.

Veți avea nevoie de asemenea reacționează-native-vector-icoane pachet. Acesta este folosit în mod specific pentru pictograma din spate în antet.

npm instalează -save react-native-vector-icons

Deschide Android / app / build.gradle fișier și adăugați o referință la pachet:

dependente // restul dependențelor sunt aici la proiectul de compilare de top (': icons react-native-vector') // add this

Faceți același lucru cu Android / settings.gradle fișier adăugând următoarele în partea de jos:

include: proiectul "reactiv-nativ-vector-icons" ("reactiv-nativ-vector-icons").

Deschis Android / app / src / main / java / com / reacționează-nativ-comune ecrane / MainApplication.java și importați pachetul:

import java.util.Arrays; import java.util.List; import com.oblador.vectoricons.VectorIconsPackage; //adaugă asta

În cele din urmă, inițializați pachetul: 

@Override Protected List getPackages () retur Arrays.asList (noul MainReactPackage (), noul VectorIconsPackage () // adăugați acest); 

Crearea paginii de știri

Bine, acum că ați încercat să codificați aspectul dvs. (fără cheating, nu?) Vă voi arăta cum mi-am construit implementarea.

Probabil că ați observat tendința până acum. Am aranjat aceste lucruri în funcție de dificultate - sau cel puțin în funcție de ceea ce am găsit dificil! Deci, acest ecran final este, în principiu, șeful mare dintre celelalte ecrane pe care le-ați creat până acum. Nu te mira, totuși, pentru că te voi conduce pas cu pas.

Veți avea nevoie de câteva imagini pentru imaginea de previzualizare a fiecărui element de știri. Am adăugat câteva imagini în repo pe care le puteți utiliza dacă doriți.

Începeți prin adăugarea codului de boilerplate: 

import React, Component de la "reacție"; importați StyleSheet, Text, Vizualizare, ScrollView, Imagine de la "reactiv-nativ"; import Icon de la "reactive-native-vector-icons / FontAwesome"; butonul de import din '... / components / Button'; Import NewsItem din '... / components / NewsItem';

De data aceasta există o nouă componentă numită NewsItem (src / componentelor / NewsItem). După cum sugerează și numele, este folosit pentru redarea fiecărui element de știri. Vom reveni la aceasta mai târziu, dar mai întâi aruncăm o privire la ea constructor() funcţie. La fel ca ecranul galeriei mai devreme, aceasta folosește statul pentru a stoca sursa de date pentru elementele de știri. Titlurile și rezumatele provin din New York Times, dar imaginile provin din Google Images (și sunt etichetate pentru reutilizare de către proprietarii lor).

constructor (recuzită) super (recuzită); this article: pretext: 'Grey Matter', titlu: 'Art Makes You Smart', rezumat: 'Vizitele muzeului măresc scorurile testului, generează responsabilitate socială și mărește aprecierea artelor studenților' (...), pretext: ", titlu:" Tensiunea și erorile înaintea pericolului ", rezumat:" Interviurile și documentele oferă detalii noi despre modul în care lansarea președintelui Obama \ ", pretext:", titlu: "36 de ore în Charleston, SC", rezumat: "Mulțimile sunt mai subțiri și temperaturile sunt ușoare în timpul iernii în acest ... ", imagine: require ('... /images/rails.jpg'),]; 

Conținutul este împărțit în trei părți: antetul, textul instrucțiunii și știrile. Antetul este foarte similar cu antetul din ecranul calendar anterior; singura diferență este că, în loc de trei, există doar două elemente vizibile. (Dacă doriți o reîmprospătare a modului în care a fost făcut ecranul calendarului, continuați și citiți acest tutorial.) 

Eu spun "vizibil" pentru că există de fapt trei elemente - ultimul este doar ascuns! Acest lucru permite centrarea ușoară a textului în mijloc. Dacă aveți doar două elemente în antet, este dificil să vă dați seama cum să împărțiți spațiul dintre cele două elemente și să aveți în continuare mijlocul care apar centrat. Dar dacă aveți trei elemente, fiecare poate avea același lucru contracta valoare, și puteți folosi doar aliniere text pentru a poziționa textul sau alignItems a pozitiona Vedere componente.

render () return (     Cele mai multe e-mailuri     SWIPE ACȚIUNI SECȚIUNI   this.renderNews ()   ); 

 renderNews () funcția este cea care buclează prin toate știrile din stare și le face să utilizeze NewsItem component.

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

Următorul este codul pentru NewsItem componentă. Începeți prin adăugarea codului componentei React de la boilerplate. După cum ați văzut mai devreme, această componentă acceptă cheieindex, și știri ca elemente de recuzită. Chiar ai nevoie de ea index și știricheie este doar modul React Native de identificare unică a fiecărui rând dintr-o listă. Trebuie să o furnizați de fiecare dată când utilizați Array.map pentru redare; altfel, se va plânge. 

Când utilizați componente funcționale, recuzele sunt transmise ca un singur argument. Mai jos, recuzile individuale sunt extrase folosind atribuirea de distrugere, deci news, index practic extrage știri și index proprietăți din recuzită. De acolo puteți obține numărul care urmează să fie redat.

import React, Component de la "reacție"; importați StyleSheet, Text, Vizualizare, Imagine de la "reactiv-nativ"; butonul de import din "./Button"; const NewsItem = (news, index) => da numărul = (index + 1) .toString (); întoarcere (… ); 

Dacă vă uitați la captura de ecran de mai devreme, puteți vedea că fiecare articol de știri poate fi împărțit în două grupuri: unul care afișează textul de știri (numărul, titlul și fragmentul) și unul care afișează imaginea de caracteristică. 

Asta rezolvă problema cu imaginea de caracteristică, deoarece este doar un element. Dar pentru textul de știri, trebuie să-l împărțiți mai departe. Așa cum ați observat, numărul este în aceeași poziție, chiar dacă titlul are un pretext (de ex. "Grey Matter"). Pretextul are de asemenea un stil diferit de titlu și număr. 

Folosind aceste cunoștințe, puteți deduce că numărul, pretextul și titlul nu trebuie să fie împachetate împreună într-un singur recipient. În plus, pretextul, titlul și fragmentul arată ca și cum ar fi stivuite vertical, astfel încât să le puteți pune în interiorul unui singur container. Numai numărul ar trebui să fie scos. Cu asta veți ajunge cu următorul marcaj:

 getPretext () vă permite să faceți în mod condiționat un Text componentă numai atunci când un articol de știri are un pretext în el.

funcția getPretext (news) if (news.pretext) return ( News.pretext ); 

Iată-l onPress funcţie. Tot ce face este alertarea titlul de știri, dar într-o aplicație reală acest lucru ar trebui să navigați la articolul actual:

funcția onPress (știri) alert (news.title); 

În acest moment, pagina va arăta astfel:

Acum, adăugați următoarele stiluri la pagina Știri:

const stiles = StyleSheet.create (container: flex: 1, antet: flexDirection: 'row', backgroundColor: '#FFF', padding: 20, justifyContent: 'space-between', borderBottomColor: '# E1E1E1' , borderBottomWidth: 1, header_button: flex: 1,, spațiu liber: flex: 1, back_button: flexDirection: 'row', alignItems: 'center', back_button_label: color: '# 397CA9', fontSize : 20, instrucțiuni: alignSelf: 'center', marginTop: 5, instruction_text: culoare: '# A3A3A3', header_text: flex: 1, alignSelf: 'center', header_text_label: fontSize: 20 , textAlign: 'centru', news_container: flex: 1, flexDirection: 'coloana',);

Nu voi mai trece prin ceea ce face fiecare linie de cod, deoarece practic aplică aceleași concepte pe care le-ați învățat în tutorialele anterioare din această serie. Iată ce va arăta pagina după aplicarea stilurilor de mai sus:

Apoi, adăugați stilurile pentru fiecare element de știri. Fiecare news_item are o flexDirection de rând astfel încât textul de știri și imaginea recomandată să fie pe o singură linie. news_text ocupă două treimi din spațiul disponibil, în timp ce news_photo ocupă spațiul rămas.

const stiles = StyleSheet.create (news_item: flex: 1, flexDirection: 'rând', paddingRight: 20, paddingLeft: 20, paddingTop: 30, paddingBottom: 30, borderBottomWidth: 1, borderBottomColor: '# E4E4E4', news_text : flex: 2, flexDirection: "rând", umplutură: 10,);

Apoi, trebuie să adăugați stilul pentru a remedia problema, textul se suprapune cu imaginea de previzualizare. Puteți face acest lucru prin alocarea a contracta valoare pentru copiii din news_text. A contracta valoarea a fost deja atribuită news_text, dar din moment ce a Vedere a fost folosit în interiorul acestuia, trebuie să alocați și contracta pentru cei care nu vor trece peste limitele părintelui lor Vedere

Vom da o valoare flexibila 0.5 la număr, in timp ce TEXT_CONTAINER va avea o valoare de 3. Cu aceste valori, TEXT_CONTAINER va ocupa de șase ori mai mult spațiu ca număr.

număr: flex: 0.5,, text_container: flex: 3,

Acum tot ce trebuie să faceți este să adăugați atingerile finale pentru stilul textului:

pretext: culoare: '# 3F3F3F', fontSize: 20, titlu: fontSize: 28, fontWeight: bold, culoare: '# 000', fontFamily: georgia, news_photo: flex: 1, justifyContent : 'center', alignItems: 'center', fotografie: width: 120, height: 120

Și nu uitați să exportați componenta!

export default NewsItem;

Gândurile finale

Asta e! În această parte finală a acestei serii, ați învățat cum să implementați aspectul utilizat în paginile de știri. Acest tutorial a reunit toate lucrurile pe care le-ați învățat în părțile anterioare ale seriei. Ați folosit ambele flexDirection: "rând" și flexDirection: "coloana" pentru a finaliza stilurile pentru fiecare element de știri. De asemenea, ați folosit cunoștințele în alinierea imaginilor pentru imaginea de previzualizare.

Dacă ați încercat să implementați aceste machete pe cont propriu, ați eșuat și apoi ați încercat din nou, ar trebui să aveți deja suficientă abilitate pentru a implementa orice tip de aspect. Puteți aplica lucrurile pe care le-ați învățat aici pentru a implementa chiar și aspectele complexe pe care le vedeți frecvent în aplicațiile populare. Dacă doriți mai multă practică, încercați să recreați machetele pe care le vedeți în aplicațiile populare, cum ar fi Facebook sau YouTube. 

Cum a comparat soluția mea cu cea proprie? Anunțați-ne în forumul de discuții de mai jos. Între timp, verificați câteva dintre celelalte tutoriale ale noastre despre React Native și Flexbox.

  • O introducere în modulul Flexbox CSS

    CSS, în ciuda plafonului de abilități relativ scăzut perceput, pare să aibă întotdeauna o caracteristică a ucigașului. Amintiți-vă cum interogările media au fost receptive ...
    Umar Hansa
    HTML și CSS
  • Începeți cu Reacții Native Layouts

    În acest tutorial, veți afla cum să stabiliți aplicațiile React Native și cum să implementați machetele utilizate în mod frecvent în aplicații.
    Wern Ancheta
    Răspunde Nativ
  • Construiți o aplicație socială cu Reactivă Nativă

    Reactiva Nativ, creat de Facebook, vă permite să scrieți aplicații mobile native în JavaScript modern. Reacționați Aplicațiile native vor fi transformate în specificări ...
    Markus Mühlberger
    Răspunde Nativ
  • Cum de a construi o navigație cu ribon cu Flexbox

    Încercați să îmbunătățiți cunoștințele flexbox și, în același timp, să învățați cum să construiți cu ușurință un aspect atrăgător și unic? Dacă da, asigurați-vă că ați citit acest ...
    George Martsoukos
    flexbox
  • Animați aplicația dvs. Nativă reactivă

    Animațiile pot respira viața în aplicația dvs. și pot face interfața dvs. utilizator mai intuitivă. În acest tutorial, veți învăța cum să implementați diferite tipuri de animații în ...
    Wern Ancheta
    Răspunde Nativ
  • Cum de a crea o aplicație de detectare a feței cu React Native

    Ești un dezvoltator de aplicații hibride care dorește să includă detectarea feței în aplicația ta, dar nu ai idee de unde să începi? Ca un început, ai putea citi An ...
    Wern Ancheta
    Răspunde Nativ
Cod