React Native: Какой навигатор мне следует использовать? [закрыто]

Когда вы объявляете ссылочную переменную (т. е. объект), вы действительно создаете указатель на объект. Рассмотрим следующий код, в котором вы объявляете переменную примитивного типа int:

int x;
x = 10;

В этом примере переменная x является int, и Java инициализирует ее для 0. Когда вы назначаете его 10 во второй строке, ваше значение 10 записывается в ячейку памяти, на которую указывает x.

Но когда вы пытаетесь объявить ссылочный тип, произойдет что-то другое. Возьмите следующий код:

Integer num;
num = new Integer(10);

Первая строка объявляет переменную с именем num, но она не содержит примитивного значения. Вместо этого он содержит указатель (потому что тип Integer является ссылочным типом). Поскольку вы еще не указали, что указать на Java, он устанавливает значение null, что означает «Я ничего не указываю».

Во второй строке ключевое слово new используется для создания экземпляра (или создания ) объекту типа Integer и переменной указателя num присваивается этот объект. Теперь вы можете ссылаться на объект, используя оператор разыменования . (точка).

Exception, о котором вы просили, возникает, когда вы объявляете переменную, но не создавали объект. Если вы попытаетесь разыменовать num. Перед созданием объекта вы получите NullPointerException. В самых тривиальных случаях компилятор поймает проблему и сообщит вам, что «num не может быть инициализирован», но иногда вы пишете код, который непосредственно не создает объект.

Например, вы можете имеют следующий метод:

public void doSomething(SomeObject obj) {
   //do something to obj
}

В этом случае вы не создаете объект obj, скорее предполагая, что он был создан до вызова метода doSomething. К сожалению, этот метод можно вызвать следующим образом:

doSomething(null);

В этом случае obj имеет значение null. Если метод предназначен для того, чтобы что-то сделать для переданного объекта, целесообразно бросить NullPointerException, потому что это ошибка программиста, и программисту понадобится эта информация для целей отладки.

Альтернативно, там могут быть случаи, когда цель метода заключается не только в том, чтобы работать с переданным в объекте, и поэтому нулевой параметр может быть приемлемым. В этом случае вам нужно будет проверить нулевой параметр и вести себя по-другому. Вы также должны объяснить это в документации. Например, doSomething может быть записано как:

/**
  * @param obj An optional foo for ____. May be null, in which case 
  *  the result will be ____.
  */
public void doSomething(SomeObject obj) {
    if(obj != null) {
       //do something
    } else {
       //do something else
    }
}

Наконец, Как определить исключение & amp; причина использования Трассировки стека

26
задан Apswak 12 January 2017 в 12:24
поделиться

5 ответов

Отвечая на мой собственный вопрос, так как я провел немало исследований по различным вариантам и сам опробовал все основные.

НОВОЕ РЕДАКТИРОВАНИЕ: На сегодняшний день (14/3/2019) я предлагаю использовать React Navigation v3 . Это решение сообщества, которое больше всего подталкивает Facebook. Это далеко от совершенства - мне трудно начать работу, и документы, на мой взгляд, ужасны, но как только они настроены, они выполняют свою работу.

Если это не для вас, другой альтернативой является реагировать-нативная навигация по wix (к сожалению, не совместима с expo).



Следите за естественным наговиванием airbnb. Они были в бета-версии некоторое время, и в последнее время к проекту не прилагали особых усилий, поэтому я все же рекомендую React Navigation for prod. (редактировать: избегать - этот проект был удален .)



оригинальный пост ниже:

TLDR : На сегодняшний день (13.01.2017) я все еще настоятельно рекомендую React Native Router Flux . С ex-navigation , с Exponent является отличной альтернативой.

Я использовал RNRF для своего проекта, и пока он был идеальным. Превосходный Navbar & amp; настройка стека (что для меня было очень важно) и простая интеграция с другими пакетами.


Более длинная версия: (редактировать: сейчас устарела)

Навигатор : Избегать. Не вдаваясь в подробности, почему тот факт, что Facebook удалил его и больше не поддерживает, является для меня достаточно большой причиной для выбора другой навигации.

NavigatorIOS : Как следует из названия, доступно только в IOS, что не очень хорошо, если вы собираетесь использовать кроссплатформенное приложение. Есть пара различий, когда дело доходит до стекирования, которое для меня превосходит целое «учись один раз, пиши где угодно» , к чему стремится FB. С учетом вышесказанного, если навигация вашего iOS-приложения не слишком сложна и , и вы не ищете слишком много настроек навигационной панели, это довольно хороший выбор, который использует встроенную навигацию UIKit, поэтому будет автоматически отображать навигацию. панель с кнопкой возврата и заголовком.

NavigationExperimental : Не пугайтесь его имени, как я. NavigationExperimental имеет большой контроль над стеком навигации и позволяет значительно упростить управление состоянием. Исключая сторонние библиотеки, это перейти к опции навигации.

Ex-Navigation : Я просто процитирую Эрика Висенти из Facebook, который входит в команду React Native:

Если вы заинтересованы в более настоятельном подходе, где Вы можете сортировать вызовы методов для навигации по своему приложению аналогично предыдущему навигатору, тогда я определенно рекомендую ExNavigation. Мы относительно тесно сотрудничаем с Exponent, поэтому эти вещи не собираются расходиться опасными способами.

React Router Native : Документы говорят все. Все, что я могу сказать, если вы привыкли к React Router, это может быть для вас.


Следите за: Реагируйте на встроенную навигацию по WIX . Выглядит очень прилично, но я не попробовал, учитывая тот факт, что он немного отстает от последней версии реагировать нативно (при написании этого ответа).


Интересный RN Nav читает:

React Native - Какой навигатор мне следует использовать?

Первый взгляд: React Native Navigator Experimental Part 1

26
ответ дан Apswak 12 January 2017 в 12:24
поделиться

Вы можете использовать Ex-Navigation , которая построена поверх NavigationExperimental и поддерживает как iOS, так и Android. Кроме того, он имеет систему навигации по маршруту и ​​правильно поддерживает кнопку возврата Android.

Если вы хотите продолжать использовать JavaScript-компонент Navigator, я построил react-native-navigator-wrapper , который представляет собой простую оболочку вокруг API Navigator, которая поддерживает наиболее распространенные шаблоны навигации, такие как push, поп и модалы.

3
ответ дан amb 12 January 2017 в 12:24
поделиться

React Navigation , новый проект на этой территории. Лично я нахожу это лучше, чем React Native Router Flux, который больше не поддерживается.

React Navigation имеет много полезных функций с соответствующей документацией. Его популярность быстро растет. AFAIK, ребята из сообщества разработчиков React, стоят за этим проектом. Проверьте это, вам, вероятно, понравится.

РЕДАКТИРОВАТЬ: React Navigation теперь является официальной навигационной библиотекой.

2
ответ дан Vinay 12 January 2017 в 12:24
поделиться

Я только когда-либо использовал React Router Native и у меня никогда не было проблем.

0
ответ дан maraujop 12 January 2017 в 12:24
поделиться

RN библиотеки выходят каждый день. В подобной ситуации, как вы в наши дни, мой выбор - использовать router-flux для простоты, пока нативная библиотека wix не начнет поддерживать более новые версии RN. (Насколько я помню, есть проблемы с упоминанием участия разных людей, поэтому он довольно активен). RN основан на компонентах, поэтому легко вносить изменения по пути. Так что не зацикливайтесь, как будто вы сделали определенный выбор:)

1
ответ дан Arda Ilgaz 12 January 2017 в 12:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: