gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 07:44:49 25 4
gpt4 key购买 nike

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

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

但是,当应用程序在安装后首次启动时启动(关于安装后首次启动的部分至关重要)并且我看到他们不使用同步我初始化一个本地 Realm ,我将数据保存到该 Realm 直到他们决定登录进入他们的同步帐户(如果他们有的话)。在这一点上,我尝试从同步 Realm 中提取信息,但它没有我在仅初始化同步 Realm 时看到的信息(如果在应用程序启动时我检测到它们使用同步)。

我能够以同步用户身份登录,但如果我之前已经初始化了本地 Realm 并且此逻辑在安装后首次启动应用程序时运行,则数据不存在。当我在应用程序的二次启动上初始化本地和同步 Realm 时,数据仅从 Realm 对象服务器显示(启动前无需重新安装)。

这是一个简单的测试脚本,其中包含虚拟数据,我已经能够用它来复制观察到的行为:

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 Native 应用程序,然后将此代码添加到主要组件 componentDidMount 函数中,您应该会在应用程序的第一次运行时看到它(在您取消注释注册代码一次之后)您会看到测试集合长度为 0,但是当您刷新时,您会看到测试集合长度为 1。

在这方面的任何帮助都会很棒。

谢谢!

最佳答案

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

关于react-native - React Native 中的多个 Realm 在安装后首次启动应用程序时无法正确查询 Realm 对象服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42565970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com