Рубрики
Без рубрики

Начало работы с навигацией на навигацию, навигационное решение для реагирования

Если вы работали с REACT NARION для любого количества времени, которые вы, вероятно, были запутаны, как вы ориентируетесь в ваше приложение (практики, пакеты и т. Д.). Я использовал реагировать на родных с самых ранних дней этого …

Автор оригинала: Spencer Carli.

Если вы работали с REACT NARION для любого количества времени, которые вы, вероятно, были запутаны, как вы ориентируетесь в ваше приложение (практики, пакеты и т. Д.). Я использовал React Rounding с самых ранних дней его открытия, поставленный и попробовал много решений, это был мой навигатор …

Navigatorios> Navigator> React – Nature-Marriter-Flux> NaviGateExperiental или Ex-навигация (в зависимости от требований навигации)

Каждое обновление потребовало времени для рефакторов и ввести новый, немного другой, шаблон навигации и управление состоянием навигации.

К счастью, у нас теперь есть единое «официальное» решение для навигации в реактивных реактивных отношениях с реактивным навигацией. Это решение заменит навигатор, навигацию эксплуатарифмию, а экс-навигация стала новым «официальным» навигационным решением.

В настоящее время он в бета-версии, но находится в довольно стабильном состоянии. Если вы начинаете новое нативное приложение raction, я бы сказал, что начну с реактивной навигации, он будет только лучше отсюда.

Сегодня я хочу занять некоторое время настроить приложение с некоторыми обычными потребностями маршрутизации, используя React-навигацию. Мы покроем вкладки, стеки и модалы – это просто очень простой первый взгляд на пакет. Вот конечный продукт

1.gif

Код

Весь код для этого учебника может быть Найдено на 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;
2.png.

Тем не менее, мы хотим добавить значок в баров вкладок, чтобы все выглядят справа. Есть два разных способа сделать это – один – это определить эту информацию на самом экране через навигация Статический или, и это мой предпочтительный способ, чтобы определить его в той же точке, который вы определяете вкладки.

// router.js

export const Tabs = TabNavigator({
  Feed: {
    screen: Feed,
    navigationOptions: {
      tabBarLabel: 'Feed',
      tabBarIcon: ({ tintColor }) => 
    },
  },
  Me: {
    screen: Me,
    navigationOptions: {
      tabBarLabel: 'Me',
      tabBarIcon: ({ tintColor }) => 
    },
  },
});
3.png.

Вкладки очень просты, чтобы настроить при использовании 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 }) => 
    },
  },
  ...
});
4.png.

Хотя это работает, это не выглядит совсем правильно, мы хотим какой-то заголовок на нашу навигационную панель на экране подачи … Как до того, как мы сможем использовать навигация установить это. Проверьте документы на все, что вы можете сделать здесь.

// 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), а данные, которые мы хотим перейти на следующий экран. Это оставляет нас с

5.GIF.

Теперь вам может задаться вопросом, как мы обращаемся к передаванию данных, передаваемых на новый экран. Это, как функция навигации, доступна на 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;

Все это оставляет нас со следующими

6.GIF.

Помните, все это Код доступен на Github И я призываю вас проверить это, а также Реагистрационные документы Отказ

Если вы заинтересованы в реагированной местности и изучения того, что идет в создание приложений по созданию качества продукции Зарегистрируйтесь на мой список электронной почты Отказ Этот пост был первоначально опубликован на Средний Отказ