首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >React Native中的多个领域在安装后首次启动应用程序时无法正确查询领域对象服务器

React Native中的多个领域在安装后首次启动应用程序时无法正确查询领域对象服务器
EN

Stack Overflow用户
提问于 2017-03-03 05:07:14
回答 1查看 699关注 0票数 3

我在React Native中处理多个领域时遇到了一个问题。我正在开发一个应用程序,它允许用户在没有订阅的情况下使用应用程序(使用本地领域),然后在他们的应用程序旅程中的任何时候,他们都可以选择升级到具有同步功能的订阅(使用同步到领域对象服务器)。

当我启动应用程序时,我会检查他们是否在使用同步,如果是的话,我会初始化一个与他们的用户同步的领域,一切都很好。我得到了我想要的所有数据。

然而,当应用程序在安装后第一次启动时启动(安装后第一次启动是至关重要的),并且我看到他们没有使用同步,我会初始化一个本地域,我将数据保存到这个域中,直到他们决定登录到他们的同步帐户(如果他们有一个)。此时,我尝试从同步领域获取信息,但它没有我仅在初始化同步领域时看到的信息(在应用程序启动时,我检测到它们使用同步)。

我可以作为同步用户登录,但是如果我之前初始化了一个本地域,那么数据就不在那里,并且这个逻辑在安装后第一次启动应用程序时运行。只有当我在第二次启动应用程序时初始化本地和同步的领域时,数据才会从领域对象服务器中显示出来(启动前没有重新安装)。

下面是一个包含虚拟数据的简单测试脚本,我可以用它来复制观察到的行为:

代码语言:javascript
运行
复制
const username = 'testuser2';
const password = 'supersecret';
const tld = 'REALM_OBJECT_SERVER_TLD';

class Test extends Realm.Object {}
Test.schema = {
  name: 'Test',
  properties: {
    id: {
      type: 'string',
    },
  }
};

function initLocalRealm() {
  return new Realm({
    path: 'local.realm',
    schema: [Test],
  });
}

function initSyncedRealmWithUser(user) {
  return new Realm({
    path: 'synced.realm',
    sync: {
      user,
      url: `realm://${tld}:9080/~/data`,
    },
    schema: [Test],
  });
}

function writeTestObjectWithId(realm, id) {
  realm.write(() => {
    realm.create('Test', {
      id,
    });
    alert(`Test object with id: ${id}`);
  });
}

initLocalRealm();

// setup
// uncomment this and comment out the login section to setup user on first run
// Realm.Sync.User.register(`http://${tld}:9080`, username, password, (error, user) => {
//   if (error) {
//     return;
//   }
//   const syncedRealm = initSyncedRealmWithUser(user);
//   writeTestObjectWithId(syncedRealm, '1');
// });

// login
Realm.Sync.User.login(`http://${tld}:9080`, username, password, (error, user) => {
  if (error) {
    return;
  }
  const syncedRealm = initSyncedRealmWithUser(user);
  alert(`Synced realm test objects: ${syncedRealm.objects('Test').length}`);
});

如果您创建了一个react原生应用程序,然后将此代码添加到main components componentDidMount函数中,您应该会看到,在应用程序的第一次运行时(在取消注释注册代码一次之后),您将看到测试集合长度为0,但是当您刷新时,您将看到测试集合长度为1。

这方面的任何帮助都将是非常棒的。

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2017-03-15 17:23:02

运行您的代码片段,只要我取消对login部分的注释,就会立即得到长度为1。您是否可以尝试使用Realm Browser观察您的同步域,并查看在注册用户后,它是否具有您期望的数据?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42565970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档