Автор оригинала: Spencer Carli.
Если вы работали с REACT NARION для любого количества времени, которые вы, вероятно, были запутаны, как вы ориентируетесь в ваше приложение (практики, пакеты и т. Д.). Я использовал React Rounding с самых ранних дней его открытия, поставленный и попробовал много решений, это был мой навигатор …
Navigatorios> Navigator> React – Nature-Marriter-Flux> NaviGateExperiental или Ex-навигация (в зависимости от требований навигации)
Каждое обновление потребовало времени для рефакторов и ввести новый, немного другой, шаблон навигации и управление состоянием навигации.
К счастью, у нас теперь есть единое «официальное» решение для навигации в реактивных реактивных отношениях с реактивным навигацией. Это решение заменит навигатор, навигацию эксплуатарифмию, а экс-навигация стала новым «официальным» навигационным решением.
В настоящее время он в бета-версии, но находится в довольно стабильном состоянии. Если вы начинаете новое нативное приложение raction, я бы сказал, что начну с реактивной навигации, он будет только лучше отсюда.
Сегодня я хочу занять некоторое время настроить приложение с некоторыми обычными потребностями маршрутизации, используя React-навигацию. Мы покроем вкладки, стеки и модалы – это просто очень простой первый взгляд на пакет. Вот конечный продукт
Код
Весь код для этого учебника может быть Найдено на Github Отказ Я начну с простого приложения, которое имеет Реагистрационные элементы , несколько экранов, сделанных, а некоторые пользовательские данные из Случайный генератор пользователя Так что мы можем сосредоточиться на навигации, а не настроить приложение.
видео
Предпочитаю учиться на видео? Проверьте видео версию этого урока на YouTube.
Начало работы с навигацией RACT
Вкладки
Первое, что мы добавим, – это две вкладки – один для списка пользователей и один для подробной информации о текущем пользователе. Для достижения этого мы будем использовать Табнавигатор от навигации на реакцию.
Мы будем работать в config/marrer.j
s файл. Первое, что нам нужно сделать, это импортировать наши предварительно построенные экраны – Feed.js
и Me.js
Отказ Нам также нужно импортировать Табнавигатор
от Реагистрационная навигация
и Значок
от Реактивные элементы
Отказ
// router.js import React from 'react'; import { TabNavigator } from 'react-navigation'; import { Icon } from 'react-native-elements'; import Feed from '../screens/Feed'; import Me from '../screens/Me';
С этого завершено мы можем начать определить наш табнавигатор. Tabnavigator принимает объект, и каждая пара клавиш/значение будет представлять вкладку.
// router.js export const Tabs = TabNavigator({ Feed: { screen: Feed, }, Me: { screen: Me, }, });
Вы можете увидеть, что затем мы пропустим экран на каждую вкладку – это будет компонент, который должен быть отображен, когда эта вкладка активна.
Последнее, что нам нужно сделать, это использовать навигатор вкладок в нашей точки входа приложения. Результат Tabnavigator – это просто компонент и может быть оказан, как и любой другой.
// index.js import React, { Component } from 'react'; import { Tabs } from './config/router'; class App extends Component { render() { return; } } export default App;
Тем не менее, мы хотим добавить значок в баров вкладок, чтобы все выглядят справа. Есть два разных способа сделать это – один – это определить эту информацию на самом экране через навигация
Статический или, и это мой предпочтительный способ, чтобы определить его в той же точке, который вы определяете вкладки.
// router.js export const Tabs = TabNavigator({ Feed: { screen: Feed, navigationOptions: { tabBarLabel: 'Feed', tabBarIcon: ({ tintColor }) =>}, }, Me: { screen: Me, navigationOptions: { tabBarLabel: 'Me', tabBarIcon: ({ tintColor }) => }, }, });
Вкладки очень просты, чтобы настроить при использовании Tabnavigator, и вы можете быстро обновлять и изменять их.
Навигационная стек
Теперь при нажатии элемента строки, скорее всего, и правильно, ожидайте, что мы перейдем на новый экран в результате. Для этого мы будем использовать Stacknavigator Где мы добавляем новый экран на стек.
API чрезвычайно похож на Tabnavigator, где требуется объект, в котором мы определяем все экраны, которые должны быть доступны в этом стеке.
Во-первых, убедитесь, что вы импортируете Stacknavigator из Реагистрационная навигация
Отказ Вы тогда хотите Импортируйте userdetail из '../shreens/userdetail';
Отказ Затем мы определяем стекнавигацию, так же, как мы сделали для табнавигатора. Затем мы можем заменить определение экрана подачи в Tabnavigator с нашим новым стеком.
Я не упомянул об этом раньше, кроме как в навигации rection, в дополнение к принятию компонентов для экрана, он принимает другие стеки навигации для отображения экрана. Это означает, что наше Feedstack
будет вложен в нашу Вкладки
Отказ
// router.js // ... export const FeedStack = StackNavigator({ Feed: { screen: Feed, }, Details: { screen: UserDetail, }, }); export const Tabs = TabNavigator({ Feed: { screen: FeedStack, // Replaced Feed with FeedStack navigationOptions: { tabBarLabel: 'Feed', tabBarIcon: ({ tintColor }) =>}, }, ... });
Хотя это работает, это не выглядит совсем правильно, мы хотим какой-то заголовок на нашу навигационную панель на экране подачи … Как до того, как мы сможем использовать навигация
установить это. Проверьте документы на все, что вы можете сделать здесь.
// router.js // ... export const FeedStack = StackNavigator({ Feed: { screen: Feed, navigationOptions: { title: 'Feed', }, }, Details: { screen: UserDetail, navigationOptions: ({ navigation }) => ({ title: `${navigation.state.params.name.first.toUpperCase()} ${navigation.state.params.name.last.toUpperCase()}`, }), }, }); // ...
Теперь, чтобы на самом деле навигаться из нашего списка на экран.
Всякий раз, когда вы определяете экран, этот компонент будет иметь доступ к навигация
на Это .props
который вы можете использовать для множества вещей. Здесь мы просто будем использовать его для навигация
функция. В Feed.js
Мы добавим следующее в Onlearnmore
функция.
// Feed.js // .. class Feed extends Component { onLearnMore = (user) => { this.props.navigation.navigate('Details', { ...user }); }; ... } export default Feed;
Не полностью перенесено в документы, мы говорим навигацию на каком экране мы хотим перейти (что выравнивается с ключом в нашем Stacknavigator), а данные, которые мы хотим перейти на следующий экран. Это оставляет нас с
Теперь вам может задаться вопросом, как мы обращаемся к передаванию данных, передаваемых на новый экран. Это, как функция навигации, доступна на This.props.navigate
– специально this.proops.navigation.state.params
Отказ Я потянул все данные для создания Userdetail.js
экран такой
// UserDetail.js const { picture, name, email, phone, login, dob, location } = this.props.navigation.state.params;
Модаль
Окончательная вещь, которую я хочу покрыть в этом руководстве, заключается в том, как создать модаль с помощью навигации на реакцию. Это общий шаблон, но тот, который я нашел удивительно сложно/не очень интуитивно реализовать в других реагистрационных решениях на основе маршрутизации.
Для достижения модала мы создаем еще один стекнавигатор с одной тонкой разницей. Этот «корневой» навигатор будет иметь наш табнавигатор внутри него, а также наши настройки экрана. Также мы также скажем этот стекнавигатор, а не принести карты/экраны справа налево, чтобы довести их снизу вверх. Все эти слова выглядят так, как это в коде (убедитесь, что импортируйте экран настроек, если вы еще не имеете).
// router.js // ... export const Root = StackNavigator({ Tabs: { screen: Tabs, }, Settings: { screen: Settings, }, }, { mode: 'modal', headerMode: 'none', });
Вы можете увидеть, что этот Stacknavigator точно такой же, как тот, который мы создали ранее, но мы используем два варианта в нем, чтобы сделать модальный интерфейс, который мы желательно. В дополнение к Режим
, который я описал выше, у нас есть Headermode
Что говорит Stacknavigator не отображать навигационную панель для этого стека – мы позволим детям навигаторов сделать это.
Чтобы сохранить последовательный интерфейс и показать, что вы можете закрыть стекнавигатор в Stacknavigator, мы также построим один для экрана настроек.
// router.js // ... export const SettingsStack = StackNavigator({ Settings: { screen: Settings, navigationOptions: { title: 'Settings', }, }, }); export const Root = StackNavigator({ Tabs: { screen: Tabs, }, Settings: { screen: SettingsStack, }, }, { mode: 'modal', headerMode: 'none', });
Наконец, мы захочем сказать точку записи приложения, чтобы использовать наш новый корневой навигатор вместо вкладок.
// index.js import React, { Component } from 'react'; import { Root } from './config/router'; class App extends Component { render() { return; } } export default App;
Все это оставляет нас со следующими
Помните, все это Код доступен на Github И я призываю вас проверить это, а также Реагистрационные документы Отказ
Если вы заинтересованы в реагированной местности и изучения того, что идет в создание приложений по созданию качества продукции Зарегистрируйтесь на мой список электронной почты Отказ Этот пост был первоначально опубликован на Средний Отказ