- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
关闭。这个问题需要更多focused .它目前不接受答案。
想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post .
2年前关闭。
Improve this question
我还是 React Native 世界的新手,通常在移动/原生世界也是如此,我发现文档在数据持久性方面有点缺乏。
我有哪些在 React Native 中存储数据的选项以及每种类型的含义?例如,我看到有本地存储和异步存储,但后来我也看到了 Realm 之类的东西,我很困惑所有这些如何与外部数据库一起工作。
我特别想知道:
最佳答案
这是我在确定推进我当前的几个应用程序项目的最佳方式时学到的东西。
异步存储 (以前“内置”到 React Native,现在自行移动)
我将 AsyncStorage 用于生产中的应用程序。存储保持在设备本地,未加密(如另一个答案中所述),如果您删除应用程序就会消失,但应作为设备备份的一部分保存并在升级期间保持不变( native 升级 ala TestFlight 和通过 CodePush 的代码升级)。
结论:本地存储;您提供自己的同步/备份解决方案。
SQLite
我参与过的其他项目使用 sqlite3 进行应用程序存储。这为您提供了类似于 SQL 的体验,可压缩的数据库也可以在设备之间传输。我没有将它们同步到后端的任何经验,但我认为存在各种库。有用于连接到 SQLite 的 RN 库。
数据以传统数据库格式存储,数据库、表、键、索引等都以二进制格式保存到磁盘。可以通过命令行或具有 SQLite 驱动程序的应用程序直接访问数据。
结论:本地存储;您提供同步和备份。
Firebase
Firebase 提供实时 noSQL 数据库以及 JSON 文档存储(如 MongoDB),用于保持 1 到 n 个客户端同步。文档讨论了离线持久性,但仅适用于 native 代码(Swift/Obj-C、Java)。 React Native 使用的 Google 自己的 JavaScript 选项(“Web”)不提供缓存存储选项(请参阅下面的 2/18 更新)。该库是在假设 Web 浏览器将要连接的情况下编写的,因此将存在半持久连接。您可能会编写一个本地缓存机制来补充 Firebase 存储调用,或者您可以编写 native 库和 React Native 之间的桥梁。
2018 年 2 月更新
我已经找到了 React Native Firebase它为原生 iOS 和 Android 库提供了一个兼容的 JavaScript 接口(interface)(做 Google 可能/应该做的事情),为您提供原生库的所有好处以及 React Native 支持。随着 Google 在实时数据库旁边引入了 JSON 文档存储,我对 Firebase 重新审视了我计划构建的一些实时应用程序。
实时数据库存储为类似 JSON 的树,您可以在网站上对其进行编辑并非常简单地导入/导出。
结论:使用 react-native-firebase,RN 获得了与 Swift 和 Java 相同的好处。 [/update] 适用于联网设备。低利用率的低成本。与其他 Google 云产品完美结合。数据很容易从他们的界面中看到和编辑。
境界
2020 年 4 月更新
MongoDB 已收购 Realm 并计划将其与 MongoDB Stitch(下文讨论)合并。 This looks very exciting .
更新 9/2020
使用过 Realm 与 Stitch:
Stitch API 本质上允许 JS 应用程序(React Native 或 Web)直接与 Mongo 数据库对话,而不是通过您自己构建的 API 服务器。
Realm 旨在在进行更改时同步数据库的各个部分。
两者的结合会让人有些困惑。以前称为 Stitch API 的仍然像传统的 Mongo 查询和更新调用一样工作,而较新的 Realm 内容附加到代码中的对象并全部自行处理同步......主要是。我仍在通过正确的方式在一个使用 SwiftUI 的项目中做事情,所以它有点跑题了。但仍然充满希望和整洁。
也是具有自动网络同步功能的实时对象存储。他们自诩为“设备优先”,演示视频展示了设备如何处理零星或有损网络连接。
他们提供免费版本的对象存储,您可以将其托管在自己的服务器或 AWS 或 Azure 等云解决方案中。您还可以创建不与设备保持同步的内存存储、不与服务器同步的仅设备存储、只读服务器存储以及用于跨一台或多台设备同步的完整读写选项。他们有专业和企业选项,每月的预付费用比 Firebase 高。
与 Firebase 不同,React Native 和 Xamarin 支持所有 Realm 功能,就像它们在 Swift/ObjC/Java( native )应用程序中一样。
您的数据与代码中的对象相关联。因为它们是已定义的对象,所以您确实有一个架构,并且版本控制是代码完整性的必要条件。通过 Realm 提供的 GUI 工具可以直接访问。设备上的数据文件是跨平台兼容的。
结论:设备优先,可选与免费和付费计划同步。 React Native 支持的所有功能。横向扩展比 Firebase 更昂贵。
iCloud
老实说,我还没有玩过很多游戏,但在不久的将来会这样做。
如果您有使用 CloudKit 的 native 应用程序,则可以使用 CloudKit JS 从 Web 应用程序(或在我们的示例中为 React Native)连接到您应用程序的容器。在这种情况下,您可能有一个原生 iOS 应用程序和一个 React Native Android 应用程序。
与 Realm 一样,它在本地存储数据并在可能的情况下将其同步到 iCloud。您的应用程序有公共(public)商店,每个客户都有私有(private)商店。客户甚至可以选择与其他用户共享他们的一些商店或物品。
我不知道访问原始数据有多容易;可以在 Apple 的网站上设置架构。
结论:非常适合面向 Apple 的应用程序。
沙发底座
大牌,背后有很多大公司。有标准支持费用的社区版和企业版。
他们在他们的网站上有一个教程,用于将东西连接到 React Native。我也没有在这个上花太多时间,但就功能而言,它看起来是 Realm 的可行替代品。我不知道在您的应用程序或您构建的任何 API 之外获取数据有多容易。
[编辑:找到了一个讨论 Couchbase 和 CouchDB 的旧链接,CouchDB 可能是另一个需要考虑的选择。两者在历史上是相关的,但目前是完全不同的产品。见 this comparison .]
结论:看起来具有与 Realm 相似的功能。可以仅限设备或同步。我需要试一试。
MongoDB
2020 年 4 月更新
Mongo 收购了 Realm 和 plans to combine MongoDB Stitch (下面讨论)与 Realm(上面讨论)。
我将此服务器端用于本地使用 AsyncStorage 的应用程序的一部分。我喜欢一切都存储为 JSON 对象,这使得到客户端设备的传输非常简单。在我的用例中,它用作电视指南数据的上游提供商和我的客户端设备之间的缓存。
数据没有硬结构,比如模式,所以每个对象都存储为一个“文档”,可以轻松搜索、过滤等。类似的 JSON 对象可以有额外的(但不同的)属性或子对象,允许在如何构建对象/数据方面具有很大的灵活性。
我没有尝试任何客户端到服务器同步功能,也没有使用它嵌入。 MongoDB 的 React Native 代码确实存在。
结论:仅限本地的 NoSQL 解决方案,没有像 Realm 或 Firebase 那样明显的同步选项。
2019 年 2 月更新
MongoDB 有一个名为 Stitch 的“产品”(或服务)。由于客户端(在 Web 浏览器和电话的意义上)不应该直接与 MongoDB 对话(这是由服务器上的代码完成的),因此他们创建了一个无服务器前端,您的应用程序可以与之交互,如果您选择使用他们的托管解决方案 (Atlas)。他们的文档表明存在可能的同步选项。
2018 年 12 月的这篇文章讨论了在示例应用程序中使用 React Native、Stitch 和 MongoDB,文档中链接了其他示例 (https://www.mongodb.com/blog/post/building-ios-and-android-apps-with-the-mongodb-stitch-react-native-sdk)。
Twilio 同步
另一个用于同步的 NoSQL 选项是 Twilio 的 Sync。从他们的网站:
“同步让您可以大规模实时管理任意数量的设备的状态,而无需处理任何后端基础设施。”
对于上述项目之一,我将其视为 Firebase 的替代方案,尤其是在与两个团队交谈之后。我也喜欢他们的其他通信工具,并使用它们从一个简单的网络应用程序发送短信更新。
[编辑] 自从我最初写这篇文章以来,我已经花了一些时间在 Realm 上。我喜欢我不必编写 API 来同步应用程序和服务器之间的数据,类似于 Firebase。无服务器功能看起来对这两个功能也很有帮助,限制了我必须编写的后端代码量。
我喜欢 MongoDB 数据存储的灵活性,因此它正在成为基于 Web 和其他需要连接的应用程序的服务器端的选择。
我找到了 RESTHeart ,它为 MongoDB 创建了一个非常简单、可扩展的 RESTful API。构建一个 React (Native) 组件来读取和写入 JSON 对象到 RESTHeart,然后将它们传递到/从 MongoDB 应该不会太难。
[编辑] 我添加了有关如何存储数据的信息。有时,如果您必须调整和测试数据,那么了解在开发和测试期间可能需要进行多少工作是很重要的。
编辑 2/2019 去年(2018 年)设计高并发项目时,我尝试了其中的几个选项。他们中的一些人在他们的文档中提到了硬并发限制和软并发限制(根据与 AltConf 两个团队的讨论,我相信 Firebase 的硬限制是 10,000 个连接,而 Twilio 是一个可以被突破的软限制)。
如果您正在为数万到数十万用户设计应用程序,请准备好相应地扩展数据后端。
关于android - 使用 React Native 时,我有哪些存储数据的选项? (iOS 和安卓),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44376002/
初学者 android 问题。好的,我已经成功写入文件。例如。 //获取文件名 String filename = getResources().getString(R.string.filename
我已经将相同的图像保存到/data/data/mypackage/img/中,现在我想显示这个全屏,我曾尝试使用 ACTION_VIEW 来显示 android 标准程序,但它不是从/data/dat
我正在使用Xcode 9,Swift 4。 我正在尝试使用以下代码从URL在ImageView中显示图像: func getImageFromUrl(sourceUrl: String) -> UII
我的 Ubuntu 安装 genymotion 有问题。主要是我无法调试我的数据库,因为通过 eclipse 中的 DBMS 和 shell 中的 adb 我无法查看/data/文件夹的内容。没有显示
我正在尝试用 PHP 发布一些 JSON 数据。但是出了点问题。 这是我的 html -- {% for x in sets %}
我观察到两种方法的结果不同。为什么是这样?我知道 lm 上发生了什么,但无法弄清楚 tslm 上发生了什么。 > library(forecast) > set.seed(2) > tts lm(t
我不确定为什么会这样!我有一个由 spring data elasticsearch 和 spring data jpa 使用的类,但是当我尝试运行我的应用程序时出现错误。 Error creatin
在 this vega 图表,如果我下载并转换 flare-dependencies.json使用以下 jq 到 csv命令, jq -r '(map(keys) | add | unique) as
我正在提交一个项目,我必须在其中创建一个带有表的 mysql 数据库。一切都在我这边进行,所以我只想检查如何将我所有的压缩文件发送给使用不同计算机的人。基本上,我如何为另一台计算机创建我的数据库文件,
我有一个应用程序可以将文本文件写入内部存储。我想仔细看看我的电脑。 我运行了 Toast.makeText 来显示路径,它说:/数据/数据/我的包 但是当我转到 Android Studio 的 An
我喜欢使用 Genymotion 模拟器以如此出色的速度加载 Android。它有非常好的速度,但仍然有一些不稳定的性能。 如何从 Eclipse 中的文件资源管理器访问 Genymotion 模拟器
我需要更改 Silverlight 中文本框的格式。数据通过 MVVM 绑定(bind)。 例如,有一个 int 属性,我将 1 添加到 setter 中的值并调用 OnPropertyChanged
我想向 Youtube Data API 提出请求,但我不需要访问任何用户信息。我只想浏览公共(public)视频并根据搜索词显示视频。 我可以在未经授权的情况下这样做吗? 最佳答案 YouTube
我已经设置了一个 Twilio 应用程序,我想向人们发送更新,但我不想回复单个文本。我只是想让他们在有问题时打电话。我一切正常,但我想在发送文本时显示传入文本,以确保我不会错过任何问题。我正在使用 p
我有一个带有表单的网站(目前它是纯 HTML,但我们正在切换到 JQuery)。流程是这样的: 接受用户的输入 --- 5 个整数 通过 REST 调用网络服务 在服务器端运行一些计算...并生成一个
假设我们有一个名为 configuration.js 的文件,当我们查看内部时,我们会看到: 'use strict'; var profile = { "project": "%Projec
这部分是对 Previous Question 的扩展我的: 我现在可以从我的 CI Controller 成功返回 JSON 数据,它返回: {"results":[{"id":"1","Sourc
有什么有效的方法可以删除 ios 中 CBL 的所有文档存储?我对此有疑问,或者,如果有人知道如何从本质上使该应用程序像刚刚安装一样,那也会非常有帮助。我们正在努力确保我们的注销实际上将应用程序设置为
我有一个 Rails 应用程序,它与其他 Rails 应用程序通信以进行数据插入。我使用 jQuery $.post 方法进行数据插入。对于插入,我的其他 Rails 应用程序显示 200 OK。但在
我正在为服务于发布请求的 API 调用运行单元测试。我正在传递请求正文,并且必须将响应作为帐户数据返回。但我只收到断言错误 注意:数据是从 Azure 中获取的 spec.js const accou
我是一名优秀的程序员,十分优秀!