Realm.objects() return React Native 上的空对象
Realm.objects() return empty objects on React Native
我正在 React Native 上测试 Realm 数据库(在 Android 上测试),我在检索数据时遇到了一些问题。
我用这个函数来保存 User。
insertData = async (data) => {
await Realm.open({schema: [UserSchema]})
.then( realm => {
realm.write(()=>{
realm.create('User', {id: '1325487', nickname: "Jack", age: 21});
})
realm.close();
})
.catch(error => {
console.log(error);
});
}
我正在尝试使用这个检索数据:
findAll = () => {
Realm.open({schema: [UserSchema]})
.then( realm => {
let users = realm.objects('User')
console.log(users)
}).catch(error => {
console.log(error);
})
}
这就是我得到的,一个空对象数组:
{"0": {}, "1": {}, "10": {}, "11": {}, "12": {}, "13": {},
"14": {}, "15": {}, "16": {}, "17": {}, "18": {}, "19": {}, "2":
{}, "20": {}, "21": {}, "22": {}, "23": {}, "24": {}, "25": {}, "26": {}, "27": {}, "28": {}, "29": {}, "3": {}, "30": {}, "31": {}, "32": {}, "33": {}, "34": {}, "35": {}, "36": {}, "37": {}, "38": {}, "39": {}, "4": {}, "5": {}, "6": {}, "7": {}, "8": {}, "9": {}}
这是用户架构:
const UserSchema = {
name: 'User',
properties: {
id: 'string',
nickname: 'string',
age: 'int'
}
}
我认为数据正在持久化,因为当我保存不同的用户并使用过滤器时,结果的数量会有所不同。你知道为什么只有空对象吗?或者以某种方式查看我的领域数据库中有什么?
您使用的是领域 5.0.2 还是 5.0.1?
如果是care的话,realm js 5.0.2有bug https://github.com/realm/realm-js/releases/tag/v5.0.3
将领域更新到版本 5.0.3,它应该可以工作
我刚刚删除 node_modules 并重新安装。 '-' 谢谢!
我也有同样的问题,但是当我传递我想要的属性的名称时,我可以得到值,例如:
user.id
user.nickname
user.age
切记如果是列表,必须使用循环扫描数组,例如:
map.listUser(item => {
console.log(item.id);
console.log(item.nickname);
console.log(item.age);
})
对我来说,这解决了对象取值的问题。但是,我仍然看不到日志中的项目。
我也遇到了同样的问题,在 react native 中从 realm db 检索数据时出现了一个空对象数组。
我在Android Studio logcat中发现的是数据不可见,看起来像:
{"0": {}, "1": {}, "10": {}, "11": {}, "12": {}, "13": {}, "14": {}, "15": {}, "16": {}, "17": {}, "18": {}, "19": {}, "2": {}, "20": {}, "21": {}, "22": {}, "23": {}, "24": {}, "25": {}, "26": {}, "27": {},
但是,您在 Visual Studio(即终端)中检查 logcat
您可以看到结果。
结论:响应中有数据,无法在 Android Studio logcat 中看到,但在 Visual Studio 终端中。
tl;博士
const virtualUsers = realm.objects('User');
const users = JSON.parse(JSON.stringify(virtualUsers));
console.log(users);
说明
Realm 结果是一个“虚拟”对象
Realm 结果包含 virtual/Proxy 个对象。它们包含对象属性的 getters and setters,但本身不包含可枚举属性。这就是你在调试时会看到Symbol(_external)
的原因。
更多
Realm 确实在 Result 对象上定义了一个 toJSON()
函数。这对于将对象强制转换为实际值很有用。
而不是:
let users = realm.objects('User')
使用:
let users = JSON.parse(JSON.stringify(realm.objects('User')))
警告
这会带来性能损失。仅当您必须使用具有可枚举属性的对象时才应这样做。
我正在 React Native 上测试 Realm 数据库(在 Android 上测试),我在检索数据时遇到了一些问题。
我用这个函数来保存 User。
insertData = async (data) => {
await Realm.open({schema: [UserSchema]})
.then( realm => {
realm.write(()=>{
realm.create('User', {id: '1325487', nickname: "Jack", age: 21});
})
realm.close();
})
.catch(error => {
console.log(error);
});
}
我正在尝试使用这个检索数据:
findAll = () => {
Realm.open({schema: [UserSchema]})
.then( realm => {
let users = realm.objects('User')
console.log(users)
}).catch(error => {
console.log(error);
})
}
这就是我得到的,一个空对象数组:
{"0": {}, "1": {}, "10": {}, "11": {}, "12": {}, "13": {},
"14": {}, "15": {}, "16": {}, "17": {}, "18": {}, "19": {}, "2":
{}, "20": {}, "21": {}, "22": {}, "23": {}, "24": {}, "25": {}, "26": {}, "27": {}, "28": {}, "29": {}, "3": {}, "30": {}, "31": {}, "32": {}, "33": {}, "34": {}, "35": {}, "36": {}, "37": {}, "38": {}, "39": {}, "4": {}, "5": {}, "6": {}, "7": {}, "8": {}, "9": {}}
这是用户架构:
const UserSchema = {
name: 'User',
properties: {
id: 'string',
nickname: 'string',
age: 'int'
}
}
我认为数据正在持久化,因为当我保存不同的用户并使用过滤器时,结果的数量会有所不同。你知道为什么只有空对象吗?或者以某种方式查看我的领域数据库中有什么?
您使用的是领域 5.0.2 还是 5.0.1?
如果是care的话,realm js 5.0.2有bug https://github.com/realm/realm-js/releases/tag/v5.0.3
将领域更新到版本 5.0.3,它应该可以工作
我刚刚删除 node_modules 并重新安装。 '-' 谢谢!
我也有同样的问题,但是当我传递我想要的属性的名称时,我可以得到值,例如:
user.id
user.nickname
user.age
切记如果是列表,必须使用循环扫描数组,例如:
map.listUser(item => {
console.log(item.id);
console.log(item.nickname);
console.log(item.age);
})
对我来说,这解决了对象取值的问题。但是,我仍然看不到日志中的项目。
我也遇到了同样的问题,在 react native 中从 realm db 检索数据时出现了一个空对象数组。
我在Android Studio logcat中发现的是数据不可见,看起来像:
{"0": {}, "1": {}, "10": {}, "11": {}, "12": {}, "13": {}, "14": {}, "15": {}, "16": {}, "17": {}, "18": {}, "19": {}, "2": {}, "20": {}, "21": {}, "22": {}, "23": {}, "24": {}, "25": {}, "26": {}, "27": {},
但是,您在 Visual Studio(即终端)中检查 logcat 您可以看到结果。
结论:响应中有数据,无法在 Android Studio logcat 中看到,但在 Visual Studio 终端中。
tl;博士
const virtualUsers = realm.objects('User');
const users = JSON.parse(JSON.stringify(virtualUsers));
console.log(users);
说明
Realm 结果是一个“虚拟”对象
Realm 结果包含 virtual/Proxy 个对象。它们包含对象属性的 getters and setters,但本身不包含可枚举属性。这就是你在调试时会看到Symbol(_external)
的原因。
更多
Realm 确实在 Result 对象上定义了一个 toJSON()
函数。这对于将对象强制转换为实际值很有用。
而不是:
let users = realm.objects('User')
使用:
let users = JSON.parse(JSON.stringify(realm.objects('User')))
警告
这会带来性能损失。仅当您必须使用具有可枚举属性的对象时才应这样做。