【发布时间】:2021-07-20 10:35:31
【问题描述】:
我正在开发一个offline-first 应用,在 React Native 上使用 Realm Sync。
我要解决的具体编程问题是如何在我的应用程序中使用 React Native 实现这种离线优先的行为,以便登录用户无论是在线还是离线都能获得无缝体验。我正在寻找代码,以说明使用实现此功能的 Realm Sync 离线优先的最佳实践。
其他优秀的 Realm 文档在离线优先和 demo app in the MongoDB Realm documentation 实现同步时非常有限,但不是为离线而设计的。当然,我的出发点是那个应用程序,因为它是文档和论坛中推荐的应用程序。
我已经测试了 iOS Swift 和 React Native 'Task Tracker' 应用程序,但他们的工程师证实了这一点,他们目前没有离线优先功能。
来自该应用的TaskProvider.js 中的重要代码是:
useEffect(() => {
const config = {
sync: {
user: user,
partitionValue: projectPartition,
},
};
// open a realm for this particular project
Realm.open(config).then((projectRealm) => {
realmRef.current = projectRealm;
const syncTasks = projectRealm.objects("Task");
let sortedTasks = syncTasks.sorted("name");
setTasks([...sortedTasks]);
sortedTasks.addListener(() => {
setTasks([...sortedTasks]);
});
});
// ...
}, [user, projectPartition]);
由于我需要在自己的应用程序中使用这样的代码,第一个问题是如何更改此代码以正确执行离线优先使用。此外,如果您有一个离线优先的 Realm Sync 应用程序可以在 React Native 上工作,请提供链接或相关示例代码。
【问题讨论】:
-
这个问题有点不清楚,但可能是因为术语。当使用 Realm Sync 词时,表示应用程序始终处于离线状态,但也有在线同步组件。 Task Tracker 应用程序将其所有数据存储在您的设备上(离线),然后在后台同步,它肯定首先是离线的。 Realm Sync 教程就是这样 - 适用于 Sync 情况。如果您想专注于本地存储的数据,请忽略它并通过常规的 Quick Start 指南。
-
哦,只是让您知道问题是否已关闭(不是我),要求教程被视为 OT - 来自Help 要求我们推荐或查找书籍的问题,工具、软件库、教程或其他场外资源对于 Stack Overflow 来说是无关紧要的,因为它们往往会吸引固执己见的答案和垃圾邮件。相反,请描述问题以及迄今为止为解决该问题所做的工作。 - 所以重新表述问题可能是一个好主意。
-
@Jay 您显然从未尝试过网站上的任何任务跟踪器示例应用程序。我已经测试了上面链接的 iOS Swift 和 React Native 'Task Tracker' 应用程序,它们绝对不是当前实现的离线优先功能。 - 在应用程序的“项目”视图中尝试断开网络连接。然后单击应该显示任务列表的“我的项目”。在 React Native 中,它将显示一个空列表,而 iOS Swift 实现将在离线时停止响应。
-
@Jay Real Sync 理论上的功能(我同意“离线优先”)与示例任务跟踪器应用程序中演示的功能之间存在差异,该示例几乎没有可用的离线功能功能。如果您精通 Realm Sync 编程,请分享一些您实际实现的示例代码。 - 经过一些研究,我创建了一个 PR,它将使 Task Tracker 应用程序比当前实现更具有离线功能。 - 我几乎可以将我的问题重新表述为错误报告,因为这可能被视为离线优先平台的错误。
-
另一个需要考虑的数据点:我有一个 TaskTracker 应用程序,它与 Swift 教程中的应用程序非常相似。我在 MacBook 上安装了该应用程序并运行它。我在应用程序中登录了我的帐户并创建了两个任务,然后在几秒钟后检查了 Realm Console,它们就在那里(同步)。然后我关闭了 WiFi - 模拟网络中断。我在应用程序中创建了另外两个任务来检查“首先离线”。最后,我重新启用了无线,并在几秒钟内 Realm 完成了它的工作并将这两个任务同步到服务器。所以它应该对我有用。
标签: mongodb react-native realm offline