Автор оригинала: 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 И я призываю вас проверить это, а также Реагистрационные документы Отказ
Если вы заинтересованы в реагированной местности и изучения того, что идет в создание приложений по созданию качества продукции Зарегистрируйтесь на мой список электронной почты Отказ Этот пост был первоначально опубликован на Средний Отказ