realm-js
realm-js copied to clipboard
Embedded Objects are returning 'undefined` in 10.20.0-beta.3
How frequently does the bug occur?
All the time
Description
Embedded Objects are returning undefined in 10.20.0-beta.3. The same schema is working fine in 10.14.0.
Stacktrace & log output
No response
Can you reproduce the bug?
Yes, always
Reproduction Steps
Create any embedded Objects schema and check
Version
10.20.0-beta.3
What SDK flavour are you using?
Local Database only
Are you using encryption?
No, not using encryption
Platform OS and version(s)
React Native - iOS
Build environment
Which debugger for React Native: ..
Cocoapods version
No response
Hi @saravanakumargn, thanks for the report. I was not able to reproduce your issue – I created a new react-native init project, enabled Hermes, installed [email protected] and then added some code to create an object with an embedded object and log it out. The result is as expected:
{"_id": "62544c283e892b3692cc8f01", "address": {"city": "city", "country": "country", "postalCode": "postalCode", "street": "street"}, "name": "name"}
Could you please create a minimal reproduction of your issue so we can help narrow down what is causing this? You could also try out my project (https://github.com/tomduncalf/realm-issue4484) to confirm you do not see the same issue there.
@tomduncalf Thanks for your quick response. Now I can't reproduce this issue in your repo (Both Hermes enabled and disabled mode in iOS. Also, I tried using @realm/react). But, When I am running the same schema now I am getting the below results. I am Not sure what is wrong with my App. I don't have any special config in my App. (Created using npx react-native init)
I spent almost the whole day, reverted to 10.14.0, and raised this issue. Anyhow, I got the final results in 10.20.0-beta.3.
You can close this ticket, Once again thanks for your great support.
10.20.0-beta.3
LOG contact : {"_id": "62545ef3b3cf33a950a011d6", "address": [undefined], "name": "name"}
LOG contact.address : [undefined]
LOG contact.address[0] : {"city": "city", "country": "country", "postalCode": "postalCode", "street": "street"}
10.15.0
LOG contact : {"_id": "62545fece5decfee049bd1b3", "address": [[Object]], "name": "name"}
LOG contact.address : [{"city": "city", "country": "country", "postalCode": "postalCode", "street": "street"}]
LOG contact.address[0] : {"city": "city", "country": "country", "postalCode": "postalCode", "street": "street"}
schema
import {createRealmContext} from '@realm/react';
import {DownloadBooksSchema} from './DownloadBooksSchema';
import {NotesSchema} from './NotesSchema';
const AddressSchema = {
name : 'Address',
embedded : true, // default: false
properties : {
street : 'string?',
city : 'string?',
country : 'string?',
postalCode : 'string?'
}
};
const ContactSchema = {
name : 'Contact',
primaryKey : '_id',
properties : {
_id : 'objectId',
name : 'string',
// address: 'Address', // Embed a single object
address : {
type : 'list',
objectType : 'Address'
}
}
};
const myRealmConfig = {
schema : [
DownloadBooksSchema.schema,
NotesSchema.schema,
AddressSchema,
ContactSchema
],
...(__DEV__ && {
deleteRealmIfMigrationNeeded : true
})
};
const {RealmProvider, useRealm, useQuery} = createRealmContext(myRealmConfig);
export {RealmProvider, useRealm, useQuery};
Just to confirm @saravanakumargn, were you able to get this working with 10.20.0-beta.3 in the end? (Also, yesterday we released 10.20.0-beta.4)
Yes @tomduncalf 10.20.0-beta.3 working fine for me now. Thanks for your kind support.
Glad to hear it, I hope you enjoy Realm!
@tomduncalf
Now I am able to reproduce this issue in your repo. Seems, the issue with @realm/react and extends Realm.Object (use together).
Please check the code https://github.com/kalviapp/realm-issue4484. I am getting the below response.
LOG Contact : [undefined]
LOG Contact 1 : {"_id": "62556127710d74f1377f3bc5", "address": [undefined], "name": "name"}
LOG Contact 2 : [undefined]
LOG Contact 3 : {"city": "city", "country": "country", "postalCode": "postalCode", "street": "street"}
If this is out of scope please close this issue.
Thanks for the repro, that was very helpful! I was able to isolate this to what seems like a Realm React bug: https://github.com/tomduncalf/realm-issue4484/commit/47848e9b75af69397d7f47a2fea9412d1c6b8e7e
With Realm React disabled, the embedded objects are populated, but with Realm React enabled, the embedded objects are undefined. We're currently working on improvements to Realm React, so we will look at this bug as part of them. I'll let you know when there is a new Realm React release for you to try!
@takameyer FYI: It Seems, If I reverted to 10.15.0 it's working with @realm/react
I observe a very similar behavior albeit not with embedded objects.
When loading a collection with useQuery, all elements are undefined unless I dereference them individually:
const cats = useQuery('Cat')
console.log(cats) // prints [undefined, undefined, undefined]
console.log(cat[0]) // prints { "id": 0, "name": "cat1" }
cats.forEach(console.log) // nothing prints at all!!
cats.map(console.log) // nothing as well!
for(let cat of cats) {
console.log(cat)
} // properly prints all cats
I disabled hermes engine and installed realm@latest, this no longer happens.
const cats = useQuery('Cat')
Array.from(cats)
by using Array.from I solve this issue
This issue seems to be addressed in [email protected]
This issue seems to be addressed in [email protected]
I am closing the issue. Please create a new issue if the behaviour is still observed.