Aplikacje mobilne często używają więcej niż jednego ekranu, aby odpowiednio zaprezentować dane. W jaki sposób możemy stworzyć więcej niż jeden ekran? Do tego właśnie służy StackNavigator.
Aby móc używać nawigacji pomiędzy ekranami, musisz w folderze ze swoim projektem zainstalować bibliotekę o nazwie react-navigation. Możesz to zrobić wpisując kolejno polecenia:
Następnie utworzymy folder o nazwie components, a w nim komponent StackNavigator.js , w którym zaimportujemy funkcję createStackNavigator – aby utworzyć nasz navigator oraz funkcję createAppContainer – aby nawigator zamknąć w kompnencie, który będziemy mogli wyeksportować. Utworzymy również komponenty o nazwach Screen1.js , Screen2.js , Screen3.js które zaimportujemy do StackNavigatora.
StackNavigator.js
import React, {Component, PureComponent} from 'react'; import { createStackNavigator, createAppContainer } from "react-navigation"; import Screen1 from './Screen1'; import Screen2 from './Screen2'; import Screen3 from './Screen3';
Teraz utworzymy zmienną o nazwie MyStackNavigator , która będzie naszym navigatorem. Wewnątrz nawigatora dodamy trzy ekrany – ekran główny: Screen1, oraz dwa ekrany poboczne: Screen2 i Screen3.
InitialRouteName – to screen, który będzie się ładował jako domyślny. Poniżej ustawiamy również kilka opcji dla nagłówka: wysokość, kolor tła, odcień elementów znajdujących się w nagłówku, kolor i wagę czcionki.
Na koniec tworzymy komponent ze StackNavigatora, abyśmy mogli podłączyć go do naszej aplikacji:
Teraz uzupełnimy komponent Screen1, by wyświetlić dane na ekranie. Umieścimy w nim przycisk, który kierował będzie do kolejnego ekranu i dodamy odpowiednie style.
Screen1.js:
import React, {Component} from 'react'; import {StyleSheet, Text, View, TouchableHighlight } from 'react-native';
W navigationOptions ustawiamy tytuł ekranu, który będzie wyświetlał się w nagłówku. W komponencie zwracamy przycisk w postaci TouchableHighlight , który możemy odpowiednio wystylować. Po naciśnięciu przycisku nawigacja przekieruje nas do ekranu numer 2. Odpowiedzialny jest za to kod onPress={() => this.props.navigation.navigate('Screen2')}
Kolejne ekrany wyglądają następująco:
Screen2.js:
import React, {Component} from 'react'; import {StyleSheet, Text, View, TouchableHighlight } from 'react-native';
render() { return ( <View style={styles.container}> <Text style={styles.text}> This is Screen 3</Text> <TouchableHighlight onPress={() => this.props.navigation.popToTop()} style={styles.touchableHighlight} underlayColor={'#f1f1f1'}> <Text style={styles.text}>Go to Screen 1</Text> </TouchableHighlight> <TouchableHighlight onPress={() => this.props.navigation.goBack()} style={styles.touchableHighlight} underlayColor={'#f1f1f1'}> <Text style={styles.text}>Go back to Screen 2</Text> </TouchableHighlight> </View> ) } }
Ekran 2 i 3 zawierają po dwa przyciski, jeden prowadzi do kolejnego (lub pierwszego) ekranu, a drugi do poprzedniego. Ustawiając im właściwość underlayColor możemy zmienić kolor przycisku po jego dotknięciu.
Całość prezentuje się następująco:
Wszystko działa jak należy, ale możemy jeszcze poprawić efekt przewijania. W zmiennej MyStackNavigator dodamy właściwość transitionConfig, która sprawi, że nasz ekran będzie się wysuwał z prawej strony:
Piszę kody, które (zazwyczaj) działają. Tresuję Wordpressa, kodzę z Reactem, zgłębiam świat DevOps i klikam w konsoli Linuxa. Hobbystycznie optymalizuję kod, bo lenistwo to najczystsza forma produktywności. Staram się nie zwariować między bugiem a deadlinem.