Привет, разработчики! Добро пожаловать в совершенно новое руководство по рисованию React Native. Итак, в этом уроке мы собираемся создать собственный ящик реакции с помощью React Navigation, а также создадим экран-заставку. Довольно мило, да? Так что давайте прямо в это дело!
Поэтому перед написанием кода я просто хотел показать вам, что мы на самом деле собираемся сделать сегодня, чтобы вы могли иметь краткое представление о том, как все работает, прежде чем писать код.
Если вы хотите напрямую перейти к коду, вы можете проверить исходный код этого руководства в моем репозитории Github: https://github.com/Rits1272/DrawerNavigation.
Итак, сначала нам нужно создать проект React Native. Я буду использовать здесь response-native-cli, но вы также можете использовать expo. Так что запустите свой терминал и напишите:
react-native init app
Далее мы установим зависимости. Как было сказано ранее, мы будем использовать React Navigation. React Navigation - это, по сути, отдельная библиотека, которая позволяет разработчикам настраивать экран и свою навигацию с помощью нескольких строк кода. Вы можете узнать больше о реакции-навигации здесь. Итак, в терминале внутри каталога вашего проекта установите зависимости:
npm i --save react-navigation npm i --save react-navigation-stack npm i --save react-navigation-drawer
React-navigation также требует некоторых зависимостей, как описано в официальной документации. Итак, мы установим эти зависимости:
npm i --save react-native-gesture-handler react-native-reanimated react-native-screens react-native-safe-area-context
Теперь нам нужно связать эти зависимости. Итак, в вашем терминале:
react-native link react-native-gesture-handler react-native link react-native-reanimated react-native link react-native-safe-area-context react-native link react-native-screens
Если вы думаете, почему мы связываем зависимости после его установки, потому что новые добавленные собственные модули должны быть связаны, потому что они выходят за «область действия по умолчанию» проекта и для того, чтобы быть доступными для платформы RN, они должны следовать привязке процесс.
Для значка гамбургера в нашем ящике мы будем использовать векторные иконки react-native-vector. Поэтому обязательно установите его и свяжите с нашим приложением.
npm i --save react-native-vector-icons react-native link react-native-vector-icons
Итак, после установки мы готовы написать код. Таким образом, навигатор, который творит чудеса создания выдвижного ящика в приложении в реакции-навигации, - это createDrawerNavigator.
В этом приложении мы создадим три экрана: один - это главный экран, а два других - экран «О программе» и экран настроек. Мы также будем создавать заставку.
Итак, сначала пошагово создадим три экрана: Home.js, About.js и Settings.js. Итак, создайте папку «src» и под ней создайте три вышеуказанных файла. Каталог вашего проекта должен выглядеть так:
В файле Home.js напишите следующий базовый код:
import React, {Component} from 'react'; import {View, Text, StyleSheet, Button} from 'react-native'; export default class Home extends Component { static navigationOptions = { title : "Home" } render() { return ( <View style={styles.container}> <Text style={{fontSize : 25, marginBottom : 20}}>HOME SCREEN</Text><Button title='About' onPress = {() => this.props.navigation.navigate('About')} /></View> ); }} const styles = StyleSheet.create({ container: { flex : 1, justifyContent: 'center', alignItems: 'center', }, });
Вы можете скопировать и вставить тот же код на экран «О программе» и «Настройка», заменив имя класса на «О программе» и «Настройка» соответственно. Теперь у нас есть три экрана для навигации по ящику.
Мы также сделаем здесь заставку. Итак, создайте файл Splash.js внутри своей папки src и напишите следующий код.
import React, {Component} from 'react'; import {Text, View, StyleSheet} from 'react-native'; export default class Splash extends Component { async componentDidMount() { // You can load api data or any other thing here if you want const data = await this.navigateToHome(); if (data !== null) { this.props.navigation.navigate('Home'); }} navigateToHome = async () => { // Splash screen will remain visible for 2 seconds const wait = time => new Promise((resolve) => setTimeout(resolve, time)); return wait(2000).then(() => this.props.navigation.navigate('Home')) }; render() { return ( <View style={styles.container}> <Text style={{fontSize: 25}}>SPLASH SCREEN</Text> </View> ); }} const styles = StyleSheet.create({ container: { flex: 1, justifyContent: 'center', alignItems: 'center', }, });
В основном на заставке мы создаем обещание. После выполнения обещания мы переходим на главный экран. Здесь вы могли заметить, что мы использовали функцию setTimeout, в которой временной интервал составляет 2000 мс. Этот временной интервал определяет, сколько времени мы хотим показывать пользователю экран-заставку. Между тем, за эти 2 секунды вы также можете загрузить свой API (если есть).
Далее идет основная часть создания потока навигации в нашем приложении. В файле App.js напишите следующий код:
import React from 'react'; import {TouchableOpacity} from 'react-native'; // react-navigation import {createAppContainer, createSwitchNavigator} from 'react-navigation'; import {createStackNavigator} from 'react-navigation-stack'; import {createDrawerNavigator} from 'react-navigation-drawer'; import Icon from 'react-native-vector-icons/FontAwesome'; // importing screens import Home from './src/Home'; import Setting from './src/Setting'; import About from './src/About'; import Splash from './src/Splash'; // Adding Home and About in the same stack allows us to navigate to // About from Home and from Home to About screen const HomeNavigator = createStackNavigator( { 'Home': {screen: Home, navigationOptions: ({navigation}) => ({ headerLeft: () => ( <TouchableOpacity style={{marginLeft: 20}} onPress={() => navigation.toggleDrawer()}> <Icon name="indent" size={25} /></TouchableOpacity> )}) }, 'About': {screen: About} }); // Our second screen in the drawer will be Setting const SettingNavigator = createStackNavigator( { 'Setting': {screen: Setting} },{ defaultNavigationOptions: ({navigation}) => ({ headerLeft: () => ( <TouchableOpacity style={{marginLeft: 20}} onPress={() => navigation.toggleDrawer()}> <Icon name="indent" size={25} /> </TouchableOpacity> ), }), }); // This navigator makes the drawer const DrawerNavigator = createDrawerNavigator({ Home: { navigationOptions: { drawerLabel: 'Home', // Name shown in the drawer of the screen }, screen: HomeNavigator, }, Setting: { navigationOptions: { drawerLabel: 'Setting', }, screen: SettingNavigator, }}); // We used createSwitchNavigator because we don't want our user to // navigate back to Splash screen by pressing back button. Hence // Splash screen just get seen once by the user. const AppSwitchNavigator = createSwitchNavigator({ 'Splash' : {screen : Splash}, 'Drawer' : {screen : DrawerNavigator} }, { initialRouteName : 'Splash' // Telling the navigator that the first // route is Splash screen }) const App = createAppContainer(AppSwitchNavigator); export default App;
Итак, давайте разберем этот код. Сначала мы создали два навигатора стека с помощью createStackNavigator. Наш первый StackNavigator - это «HomeNavigator», а второй - «SettingNavigator». StackNavigators, как следует из названия, позволяет нам создавать стек экранов, который позволяет нам легко перемещаться между экранами, присутствующими в стеке. Итак, как вы, возможно, видели в демонстрационном видеоролике, показанном в начале, мы переходим от главного экрана к «О программе» и от «О программе» к главному экрану, поэтому мы добавили главный экран и экран «О программе» в один и тот же стек (который является HomeNavigator).
Затем мы создали SettingNavigator, который является еще одним навигатором, похожим на HomeNavigator. Мы не добавляли дополнительных экранов в этот навигатор. Но при желании можно легко добавить дополнительные экраны.
Теперь идет DrawerNavigator. Мы добавляем все экраны, которые хотим показать в ящике. Мы хотим показать главный экран и экран настроек в ящике. Поэтому мы добавили HomeNavigator и SettingNavigator в наш DrawerNavigator.
Наконец, мы добавили наш экран-заставку. Вам может быть интересно, почему мы использовали createSwitchNavigator вместо createStackNavigator. Причина вполне очевидна. Если бы мы использовали StackNavigator, то после того, как пользователь перейдет с экрана-заставки на главный экран, пользователь может нажать кнопку «Назад», и он может вернуться к экрану-заставке, а мы, очевидно, этого не хотим. SwitchNavigator предотвращает это.
Наконец, мы создали AppContainer для SwitchNavigator.
Итак, я сделал обзор навигации в нашем приложении с высоты птичьего полета.
Надеюсь, вы поняли, как создать ящик и заставку в своем приложении. Лично мне было очень трудно добавить их в одно из моих приложений, поэтому я подумал о написании этой статьи, чтобы помочь другим разработчикам сэкономить их время.
Большое спасибо! Никогда не забывайте ставить точки с запятой; ). Adios