我正在使用 Realm JS和我的 React Native应用程序。我在我的架构中插入了一个值,如下所示。
const CarSchema = {
name: 'Car',
properties: {
model: 'string'
}
};
let realm = new Realm({schema: [CarSchema]});
realm.write(() => {
realm.create('Car', {
model: 'Ford'
});
});
let cars = realm.objects('Car');
console.log(cars);
在 Chrome 控制台中,我得到以下对象而不是数据库中的所有汽车。
我是不是漏掉了什么?
最佳答案
这是 Realm 对象(以及列表和结果)工作方式的结果 - Realm 不是从数据库中提取数据并反序列化(可能)大量对象,而是为您提供延迟加载的对象和集合。 Realm.objects('Car')
不返回一个 JavaScript 数组,而是一个 Results
对象——它的行为仍然完全像一个数组,但它不是使用内置的实现的- 输入数组对象。这就是为什么它在 Chrome 控制台中看起来不像对象数组,尽管它们的行为相同。
但是,您可以使用 Array.from(realm.objects('Car'))
急切地读取数组中的 Realm 集合,这将在调试器中显示得更好。
背景
“代理”对象是 Realm 及其零拷贝哲学的基石。所有 Realm SDK 都是以相同的方式实现的——您将获得直接访问数据库的代理对象,而不是经过序列化和反序列化的普通对象。
在 realm-js 中,实际的代理机制根据您的代码是在 React Native、Node.js 还是 React Native Chrome 调试器上运行而有所不同,因此这些代理的实现细节会有所不同。
所有这一切的问题在于它在 JavaScript 调试器中的显示效果不佳。不幸的是,我不知道有什么方法可以影响 Chrome 在调试器中显示对象的方式。
资料来源:我是一名 realm-js 贡献者。
关于javascript - RealmJS - 显示代理对象而不是对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42188554/