Intereting Posts
Android TextView: «Не конкатенировать текст, отображаемый с помощью setText» Edittext изменяет размеры в ландшафтном режиме при появлении экранной панели Принудительная сеть Wi-Fi для сторонних приложений Файл сохранения файла FileOutputStream для Android Android: «Не удалось выполнить« воспроизведение »в« HTMLMediaElement »: API может быть инициирован только жестом пользователя Ошибка раздувания при расширении класса Диалоговая проблема: requestFeature () необходимо вызвать перед добавлением содержимого Отображение диалогового окна Android Custom Alert после изменения версии сборки Ошибка Android MediaPlayer / VideoView (1, -2147483648) Как программно отключить WiFi на Android-устройстве? Нарисуйте наложение (HUD) на Android VideoView? Как получить представление вкладки TabLayout? AppCompatEditText.getpParent () внутри TextInputLayout возвращает FrameLayout Как перестроить исходный код Android после внесения изменений в исходные файлы Android Тема Holo не применяется к диалогам при использовании библиотеки holoeverywhere

Каковы мои варианты хранения данных при использовании React Native? (IOS и Android)

Я по-прежнему новичок в мире React Native и, как правило, в мобильном / родном мире, и я нахожу, что документация немного не хватает, когда дело доходит до сохранения данных.

Каковы мои варианты хранения данных в React Native и значения каждого типа? Например, я вижу, что есть локальное хранилище и асинхронное хранилище, но потом я также вижу такие вещи, как Realm, и я смущен, как все это будет работать с внешней базой данных.

Я специально хочу знать:

  • Каковы различные варианты сохранения данных?
  • Для каждого, каковы пределы этого персистентности (т. Е. Когда данные больше не доступны)? Например: при закрытии приложения перезагрузка телефона и т. Д.
  • Для каждого есть различия (кроме общей настройки) между реализацией в iOS и Android?
  • Как сравнить параметры для доступа к данным в автономном режиме? (Или как обычно осуществляется доступ к автономному доступу?)
  • Есть ли еще какие-то соображения, о которых я должен помнить?

Спасибо за вашу помощь!

Solutions Collecting From Web of "Каковы мои варианты хранения данных при использовании React Native? (IOS и Android)"

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

Async Storage («встроенный» для «Реагировать родной»)

Я использую AsyncStorage для производственного приложения. Хранилище остается локальным для устройства, является незашифрованным (как указано в другом ответе), исчезает, если вы удаляете приложение, но должно быть сохранено как часть резервных копий вашего устройства и сохраняется во время обновлений (как собственные обновления, так и TestFlight и обновления кода через CodePush ).

Вывод: локальное хранилище; Вы предоставляете собственное решение для синхронизации / резервного копирования.

SQLite

Другие проекты, над которыми я работал, использовали sqlite3 для хранения приложений. Это дает вам опыт, похожий на SQL, с сжимаемыми базами данных, которые также могут быть переданы на устройство и с него. У меня не было опыта синхронизации их с концом, но я предполагаю, что существуют разные библиотеки. Существуют библиотеки RN для подключения к SQLite.

Данные хранятся в вашем традиционном формате базы данных с базами данных, таблицами, ключами, индексами и т. Д., Все сохраненные на диск в двоичном формате. Прямой доступ к данным доступен через командную строку или приложения с драйверами SQLite.

Вывод: локальное хранилище; Вы предоставляете синхронизацию и резервное копирование.

Firebase

Firebase – это база данных noSQL реального времени, предназначенная для хранения 1-го числа клиентов. Документы говорят о автономности, но только для собственного кода (Swift / Obj-C, Java). Вариант JavaScript («Веб»), который используется React Native, не предоставляет кешированную опцию хранения. Библиотека написана с предположением, что веб-браузер будет подключаться, и поэтому будет полупостоянное соединение. Вероятно, вы могли бы написать локальный механизм кеширования для дополнения вызовов памяти Firebase, или вы могли бы написать мост между родными библиотеками и React Native.

Данные хранятся как дерево JSON, которое можно редактировать на веб-сайте и импортировать / экспортировать довольно просто.

Вывод: сначала сеть, не кеширование RN. Хорошо масштабируется для устройств, подключенных к сети. Низкая стоимость для низкого использования. Комбинирует с другими облачными предложениями Google. Данные легко видны и редактируются с их интерфейса.

область

Также хранилище объектов реального времени с автоматической синхронизацией сети. Они рекламируют себя как «устройство первым», а демонстрационное видео показывает, как устройства обрабатывают спорадические или потерянные сетевые подключения.

Они предлагают бесплатную версию хранилища объектов, которую вы размещаете на своих серверах или в облачном решении, таком как AWS или Azure. Вы также можете создавать хранилища в памяти, которые не сохраняются на устройстве, устройствах, которые не синхронизируются с сервером, хранилищами только для чтения и полной возможностью чтения и записи для синхронизации по одному или нескольким устройствам. У них есть профессиональные и корпоративные варианты, которые стоят дороже в месяц, чем Firebase.

В отличие от Firebase, все возможности Realm поддерживаются в React Native и Xamarin, так же как и в Swift / ObjC / Java (родных) приложениях.

Ваши данные привязаны к объектам вашего кода. Поскольку они являются определенными объектами, у вас есть схема, а управление версиями является обязательным для разумности кода. Прямой доступ доступен через инструменты GUI, предоставляемые Realm. Файлы данных на устройстве совместимы с кросс-платформенными.

Вывод: сначала устройство, дополнительная синхронизация со свободными и платными планами. Все функции поддерживаются в React Native. Горизонтальное масштабирование дороже, чем Firebase.

ICloud

Я, честно говоря, не очень много играл с этим, но буду делать это в ближайшем будущем.

Если у вас есть собственное приложение, которое использует CloudKit, вы можете использовать CloudKit JS для подключения к контейнерам вашего приложения из веб-приложения (или, в нашем случае, React Native). В этом случае у вас, вероятно, будет собственное приложение для iOS и приложение Android React Native.

Как Realm, это локально хранит данные и синхронизирует их с iCloud, когда это возможно. Для каждого клиента есть публичные магазины для вашего приложения и частных магазинов. Клиенты могут даже захотеть поделиться некоторыми из своих магазинов или объектов с другими пользователями.

Я не знаю, как легко получить доступ к необработанным данным; Схемы могут быть настроены на сайте Apple.

Вывод: отлично подходит для приложений, ориентированных на Apple.

Couchbase

Большое имя, много крупных компаний. Существует версия Community Edition и Enterprise Edition со стандартными расходами на поддержку.

У них есть учебник на своем сайте для того, чтобы подключить к React Native. Я также не потратил много времени на это, но он выглядит жизнеспособной альтернативой Realm с точки зрения функциональности. Я не знаю, как легко добраться до ваших данных за пределами вашего приложения или любых API, которые вы создаете.

[Изменить: найдена более старая ссылка, которая рассказывает о Couchbase и CouchDB, а CouchDB может быть еще одним вариантом рассмотрения. Эти два являются исторически связанными, но в настоящее время совершенно разными продуктами. См. Это сравнение .]

Вывод: имеет аналогичные возможности как Realm. Может быть только для устройств или синхронизировано. Мне нужно попробовать.

MongoDB

Я использую эту серверную часть для части приложения, которое использует AsyncStorage локально. Мне нравится, что все хранится как объекты JSON, что делает передачу на клиентские устройства очень простой. В моем случае использования он используется в качестве кеша между провайдером данных ТВ-руководства и моими клиентскими устройствами.

Для данных нет жесткой структуры, такой как схема, поэтому каждый объект хранится как «документ», который легко доступен для поиска, фильтруется и т. Д. Подобные объекты JSON могут иметь дополнительные (но разные) атрибуты или дочерние объекты, Много гибкости в том, как вы структурируете свои объекты / данные.

Я не пробовал никаких функций синхронизации с клиентами и не использовал его. React Собственный код для MongoDB существует.

Вывод: локальное решение NoSQL, отсутствие очевидной опции синхронизации, например Realm или Firebase.


[Edit] Я провел некоторое время с Realm, так как я изначально написал это. Мне нравится, как мне не нужно писать API для синхронизации данных между приложением и сервером, подобно Firebase. Бессерверные функции также выглядят действительно полезными с этими двумя, ограничивая объем кода, который я должен написать.

Мне нравится гибкость хранилища данных MongoDB, так что это становится моим выбором для серверной части приложений, основанных на веб-интерфейсе и других приложениях.

Я нашел RESTHeart , который создает очень простой, масштабируемый API RESTful для MongoDB. Не должно быть слишком сложно создать компонент React (Native), который считывает и записывает объекты JSON в RESTHeart, который, в свою очередь, передает их в / из MongoDB.


[Edit] Я добавил информацию о том, как хранятся данные. Иногда важно знать, сколько работы вы можете провести во время разработки и тестирования, если вам нужно настроить и протестировать данные.

Люди выше попали в нужные заметки для хранения, хотя, если вам также необходимо рассмотреть любые данные PII, которые необходимо сохранить, вы также можете зашифровать в цепочке ключей, используя что-то вроде https://github.com/oblador/react-native-keychain Поскольку ASyncStorage не зашифрован. Он может быть использован как часть конфигурации persist в чем-то вроде сокращения-persist.

Быстрая и грязная: просто используйте Redux + react-redux + redux-persist + AsyncStorage для реакции-native.

Он идеально подходит для реагирования на родной мир и работает как шарм для android и ios. Кроме того, вокруг него есть сплошное сообщество и много информации.

Для рабочего примера см. F8App из Facebook.

Каковы различные варианты сохранения данных?

С реакцией native вы, вероятно, захотите использовать redux и redux-persist. Он может использовать несколько модулей хранения. AsyncStorage и redux-persist-filesystem-storage – это опции для RN.

Существуют и другие варианты, такие как Firebase или Realm, но я никогда не использовал их в проекте RN.

Для каждого, каковы пределы этого персистентности (т. Е. Когда данные больше не доступны)? Например: при закрытии приложения перезагрузка телефона и т. Д.

Используя redux + redux-persist, вы можете определить, что сохраняется, а что нет. Когда они не сохраняются, данные существуют во время работы приложения. При сохранении данные сохраняются между выполнением приложений (закрытие, открытие, перезапуск телефона и т. Д.).

AsyncStorage имеет ограничение по умолчанию на 6 МБ на Android. Можно сконфигурировать больший предел (на Java-код) или использовать в качестве механизма хранения для Android версию storage-persist-filesystem-storage.

Для каждого есть различия (кроме общей настройки) между реализацией в iOS и Android?

С помощью redux + redux-persist + AsyncStorage настройка точно такая же на Android и iOS.

Как сравнить параметры для доступа к данным в автономном режиме? (Или как обычно осуществляется доступ к автономному доступу?)

Используя сокращение, доступ к оффлайну почти автоматически благодаря своим конструктивным частям (создателям действий и редукторам).

Все данные, которые вы извлекли и сохранили, доступны, вы можете легко хранить дополнительные данные, чтобы указать состояние (выборка, успех, ошибка) и время, которое было выбрано. Обычно запрос на выборку не отменяет старые данные, и ваши компоненты просто обновляются при получении новых данных.

То же самое относится и в другом направлении. Вы можете хранить данные, которые вы отправляете на сервер, и которые все еще находятся на рассмотрении и обрабатывают их соответствующим образом.

Есть ли еще какие-то соображения, о которых я должен помнить?

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

Я собираюсь опубликовать то, что я собрал у других людей вне SO, но воздержусь от принятия этого ответа, потому что знаю, что некоторые из вас будут лучше объяснять это. Кроме того, не все мои ответы могут быть абсолютно точными, поэтому вы можете в качестве альтернативы сообщить мне в комментариях, и я обновлю этот ответ.

Хранилище только для устройств

Опции:

  • AsyncStorage (Redux-persist in Native использует AsyncStorage, если вы не укажете механизм пользовательского хранения)
  • область
  • Firebase (или это как устройство, так и внешнее?)

Соображения:

  • Данные сохраняются после закрытия приложения или перезапуска устройства.
  • Данные удаляются, когда приложение удаляется с устройства (для всех вариантов или просто AsyncStorage и iOS?) Что относительно iCloud и аналогичных соображений Android?)

Хранение нескольких устройств

Обычно это делается с внешней БД (и учетными записями пользователей), а данные, сохраненные на устройстве, гидратируются и синхронизируются с внешними данными БД. (Нужна лучшая информация здесь)