Vanlige Reage Native App Layouts Logg inn side

I denne serien lærer du hvordan du bruker React Native til å lage sidelayouter som ofte brukes i mobilapper. Oppsettene du skal skape, vil ikke være funksjonelle - i stedet er hovedfokuset i denne serien å få hendene dine skitne ved å legge ut innhold i dine React native apps. 

Hvis du er ny for å legge ut React native apps eller styling generelt, sjekk ut min tidligere opplæring:

For å følge med denne serien utfordrer jeg deg til å prøve å gjenskape hver skjerm først først, før du leser mine trinnvise instruksjoner i opplæringen. Du vil ikke ha stor nytte av denne opplæringen bare ved å lese den! Prøv først før du ser opp svarene her. Hvis du lykkes med å gjøre det som den opprinnelige skjermen, sammenligner du implementeringen din til min. Deretter bestem deg selv hvilken som er bedre!

I denne første delen av serien vil du opprette følgende påloggingsside:

Innloggingssiden brukes vanligvis som startside for apper som krever at brukere har en konto.

Her er et par eksempler på denne typen layout i naturen:

Prosjektoppsett

Det første trinnet er selvfølgelig å sette opp et nytt React Native-prosjekt:

Reager-native init reager-native-common-skjermer

Når prosjektet er satt opp, åpner du index.android.js fil og erstatt standardkoden med følgende:

Import React, Component fra 'reagere'; importer AppRegistry fra 'react-native'; importer innlogging fra './src/pages/Login'; eksporter standardklasse ReactNativeCommonScreens utvider komponent render () return (  );  AppRegistry.registerComponent ('ReactNativeCommonScreens', () => ReactNativeCommonScreens);

Lage en src / sider mappe og opprett en Login.js filen i den.

Du trenger også reagere fremmed-vektor-ikoner pakke. Dette er spesielt brukt til å gjøre Facebook-ikonet for Facebook-innloggingsknappen.

npm installere - lagre reaksjons-native-vektor-ikoner

Åpne android / app / build.gradle fil og legg til en referanse til pakken:

avhengigheter // resten av avhengighetene er her på toppen kompilere prosjektet (': reagere-native-vector-ikoner') // legge til dette

Gjør det samme med android / settings.gradle fil ved å legge til følgende nederst:

include ': reager-native-vector-icons' prosjektet (': react-native-vector-icons'). projectDir = ny fil (rootProject.projectDir, '... / node_modules / react-native-vector-icons / android')

Åpen android / app / src / hoved / Java / COM / reagerer-nativ-felles-skjermer / MainApplication.java og importer pakken:

importer java.util.Arrays; importer java.util.List; importer com.oblador.vectoricons.VectorIconsPackage; //Legg til dette

Til slutt, initialiser pakken: 

@Override beskyttet liste getPackages () return Arrays.asList (ny MainReactPackage (), ny VectorIconsPackage () // legg til dette); 

Opprette innloggingssiden

Ok, nå som du har forsøkt å kode selve oppsettet (ikke fusk, ikke sant?), Vil jeg vise deg hvordan jeg bygget implementeringen min. Åpne src / sider / Login.js fil og importer de tingene du trenger:

Import React, Component fra 'reagere'; importer StyleSheet, Text, View, TextInput, ScrollView fra 'react-native'; importer ikonet fra 'reagere-native-vector-icons / fontAwesome';

Bortsett fra standard React komponenter og reagere fremmed-vektor-ikoner pakke, må du også inkludere tre egendefinerte komponenter:

Import Container fra '... / komponenter / Container'; Importer knapp fra '... / components / Button'; importer etiketten fra '... / components / Label';

Den første er Container (src / komponenter / Container.js), hvis jobb er å legge til en bunnmargin til hva den bryter inn. Det høres trivielt ut, og ja, du kan faktisk bare bruke Utsikt og legg til de samme stilene hver gang du vil bruke den. Fordelen dette tilbyr er at du ikke trenger å bruke de samme stilene til en Utsikt flere ganger, og det tillater deg også å gjenbruke komponenten hver gang du trenger å legge til en bunnmargin til noe.

Import React, Component fra 'reagere'; importer StyleSheet, View fra 'react-native'; const Container = (rekvisitter) => retur (  props.children  );  const styles = StyleSheet.create (labelContainer: marginBottom: 20); eksport standard Container;

De Knapp komponent (src / komponenter / Button.js), som navnet antyder, brukes til å lage knapper. Hvis det er til stede, spytter dette ut hvilken som helst barnkomponent som er lagt inn i den. Ellers utsender det a Tekst komponent som viser teksten inne i knappen. En standard stil er også lagt til, men den vil ikke bli brukt hvis noDefaultStyles er tilstede i rekvisitter. Unike knappestiler passert fra rekvisitter er også valgfrie.

Import React, Component fra 'reagere'; importer StyleSheet, Text, TouchableHighlight, fra 'react-native'; const-knapp = (rekvisitter) => funksjon getContent () hvis (props.children) return props.children;  komme tilbake  Props.label  komme tilbake (  getContent ()  );  const styles = StyleSheet.create (knapp: alignItems: 'center', justifyContent: 'senter', polstring: 20,); Eksporter standard knapp;

Til slutt er det Merkelapp komponent (src / komponenter / Label.js), som i utgangspunktet bare er en Tekst komponent med noen forhåndsdefinert styling.

Import React, Component fra 'reagere'; importer StyleSheet, Text, fra 'react-native'; const Label = (rekvisitter) => retur (   Props.text  );  const styles = StyleSheet.create (textLabel: fontSize: 20, fontWeight: 'bold', fontFamily: 'Verdana', marginBottom: 10, color: '# 595856'); eksporter standard etikett;

Nå kan du gå videre til selve innloggingssiden. Inne i render () metode, pakk alt i a ScrollView komponent. Dette er svært viktig hvis du vil at appen din skal kunne imøtekomme alle typer enhetsdimensjoner og skjermretninger. 

Oftere enn ikke, uansett hvor liten høyde du tror innholdet ditt skal forbruke, vil det alltid være en enhet som ikke vil kunne vise den helt. Dermed behovet for rullefelt for å rulle innholdet.

eksporter standardklasse Innlogging utvider komponent render () return ( ...  ); 

Deretter skal du initialisere stilene:

const styles = StyleSheet.create ();

Bruk følgende stiler til ScrollViewflexDirection er valgfritt, men det er en god praksis å eksplisitt definere det slik at fremtidige utviklere vil vite nøyaktig hvordan hovedinnholdet i appen er lagt ut bare ved å kaste på koden.

bla: backgroundColor: '# E1D7D8', polstring: 30, flexDirection: 'kolonne',

Ser på skjermbildet fra tidligere, det første innholdet du vil legge til er det aller høyeste, og det er den glemte passordknappen. Legg merke til at onPress rekvisitter leveres fordi underlayColor vil ikke bli brukt hvis det ikke er noen funksjon som leveres når knappen trykkes.

 

Stilene som brukes til det, er ganske selvforklarende bortsett fra alignSelf: 'flex-end'. Dette forteller React Native å plassere elementet på slutten av den nåværende linjen. alignSelf er ekvivalent av alignItems for å spesifisere justeringen av selve elementet og ikke dets barn. Ved hjelp av flex-end lar deg oppnå en effekt som ligner på flyte: høyre i CSS.

etikett: color: '# 0d8898', fontSize: 20, alignRight: alignSelf: 'flex-end',

Neste er de to tekstfeltene sammen med deres etiketter.

   

På dette tidspunktet skal siden nå se slik ut:

Her er styling for textInput

textInput: høyde: 80, fontSize: 30, backgroundColor: '#FFF',

Nå har du kanskje begynt å legge merke til hvorfor Container komponent er viktig. Den lar deg inkapslere standardstiler slik at du ikke ender opp med å deklarere dem i hver fil. Dette er et grunnleggende prinsipp for React: du bør alltid streve for komponentgenbruk hver gang du ser en mulighet.

Knappen for å logge inn på Facebook er litt annerledes enn knappene du opprettet tidligere. Denne gangen har det noe innhold inni det som viser et ikon sammen med litt tekst. Disse legges i stedet for merkelapp rekvisitter for å tilpasse innholdet til knappen videre.

  

Når det er lagt til, må siden nå se slik ut:

Legg til stilene for Facebook-innloggingsknappen:

gjennomsiktig knapp: marginTop: 30, borderColor: '# 3B5699', borderWidth: 2, buttonBlueText: fontSize: 20, color: '# 3B5699', knappBigText: fontSize: 20, fontWeight: 'bold', inline: flexDirection: 'row',

Det er virkelig ingenting verdt å merke seg her bortsett fra styles.inline, som brukes som en hjelpeklasse for å stable alle elementene inne i den horisontale. Dette oppnår en lignende effekt som bruken av  i HTML for å pakke inn tekst som du vil vise inline. I CSS kan dette oppnås med enten skjerm: inline eller skjerm: inline-blokk

De siste elementene på denne skjermen er Logg inn og Avbryt knapper. De trenger mer plass over dem enn de andre elementene, så det er best å pakke dem i en beholder (bunntekst) og gjelde marginTop til det. Dette gir mer mening enn å erklære en ny stil bare for disse knappene.

  

Til slutt legger du til stylingen for Logg inn og Avbryt knapper:

buttonWhiteText: fontSize: 20, color: '#FFF',, buttonBlackText: fontSize: 20, color: '# 595856', primærknapp: backgroundColor: '# 34A853', footer: marginTop: 100

Til slutt, ikke glem å definere koden som skal utføres når noen av knappene trykkes!

trykk () // kjør noen kode her

Konklusjon

Det er det! I denne opplæringen har du opprettet en innloggingsside ved hjelp av Flexbox-kunnskapen din. Underveis lærte du også hvordan du bruker et tredjepartsbibliotek som heter React Native Vector Icons for å enkelt legge til ikoner i appen din. Hvordan sammenlignet min løsning med din egen? Gi oss beskjed i diskusjonsforumet nedenfor.

I neste veiledning i denne serien lærer du hvordan du lager en kalenderskjerm. I mellomtiden kan du se noen av våre andre opplæringsprogrammer på React Native og Flexbox.

  • En introduksjon til CSS Flexbox-modulen

    CSS, til tross for det relativt lave oppfattede ferdighetsloftet, ser alltid ut til å ha en morderfunksjon opp i ermet. Husk hvordan mediesøk gjøres responsive ...
    Umar Hansa
    HTML og CSS
  • Kom i gang med React Native Layouts

    I denne opplæringen lærer du hvordan du legger ut React native apps og hvordan du implementerer layouter som ofte brukes i apper.
    Wern Ancheta
    Reager Native
  • Bygg en sosial app med React Native

    React native, laget av Facebook, lar deg skrive innfødte mobilapper i moderne JavaScript. Reakt Native apps blir forvandlet til innfødte visningsspesifikke ...
    Markus Mühlberger
    Reager Native
  • Hvordan bygge en stripet navigasjon med Flexbox

    Er du ute etter å forbedre din fleksibilitets kunnskap og samtidig lære å bygge lett en attraktiv og unik layout? I så fall må du lese dette ...
    George Martsoukos
    flexbox
  • Animer React Native App

    Animasjoner kan puste livet inn i appen din og gjøre brukergrensesnittene dine mer intuitive. I denne opplæringen lærer du hvordan du implementerer ulike typer animasjoner i ...
    Wern Ancheta
    Reager Native
  • Slik oppretter du en ansiktsgjenkjenningsapp med React Native

    Er du en hybrid app-utvikler som vil inkludere ansiktsgjenkjenning i appen din, men du har ingen anelse om hvor du skal begynne? Som en start kunne du lese An ...
    Wern Ancheta
    Reager Native