Realm-js: Realm object constructor must not return another value

Created on 1 Apr 2020  ·  10Comments  ·  Source: realm/realm-js

Goals


Hi, my goal is to use ES6 Classes and inheritance as Realm models.
This possibly relates to https://github.com/realm/realm-js/issues/2768
After upgrading realm and react-native from

"realm": "2.23.0",
"react": "16.0.0",
"react-native": "0.50.3",

the following error shows up
Realm object constructor must not return another value

I was wondering if there is any way to get this to work with later versions

https://github.com/realm/realm-js/issues/2768#issuecomment-604438625 This mentions that we shouldn't extend Realm.Object but doesn't say anything else about extending other classes.
https://realm.io/docs/javascript/latest/#classes The docs don't mention anything about this either.

Code Sample

class BaseModel {}

export class Account extends BaseModel {
  static schema = {
    name: 'Account',
    primaryKey: 'uuid',
    properties: {
      uuid: 'string',
      id: {type: 'int', indexed: true},
      firstName: 'string',
      lastName: 'string',
      username: 'string',
      apiKey: 'string',
      lastLogin: 'date'
    },
  };
}

database = new Realm({
      path: 'core.realm',
      schema: [
        Account, // eslint-disable-line no-use-before-define
        // ...
      ],
      schemaVersion: 13,
      migration: () => null,
    });

Similar to https://github.com/realm/realm-js/issues/2768 the error goes away when removing the extends

Version of Realm and Tooling

"realm": "^3.6.5",
"react": "^16.13.1",
"react-native": "0.62.0",
node v10.14.2
macOS Catalina 10.15.4

I also tried 5.0.2 and 4.0.0-beta.2 and got the same error

O-Community

Most helpful comment

We have a bug in the RN debugging infrastructure for v5 and we are working to fixing this.

All 10 comments

I got the same error

"react": "16.8.3",
"react-native": "0.59.9",
"realm": "^2.25.0",
node v10.15.2
macOS Majova 10.14.6

Update Realm to the latest version (v5.0.3) which brings proper support to ES6 class syntax.
Right now we don't require the class to extend Realm.Object. In the future we will be changing that to be required. In either case Realm v5 should be working for your case

@blagoev Thank you for your reply. Using 5.0.3, the issue still comes up, though only when using debug mode.

Maybe this is due to the fact that debug mode uses a different runtime? https://reactnative.dev/docs/javascript-environment#javascript-runtime

We have a bug in the RN debugging infrastructure for v5 and we are working to fixing this.

@blagoev Thank you for the info. Do you have a timeframe for this fix by any chance? It would be very helpful.

Hi @blagoev -- Just wanted to add a request here as well. Do you have a timeframe for this fix? 🙏🏽

➤ Lyubomir Blagoev commented:

Please update to latest 6.1.3. Also change the schema classes to inherit from Realm.Object

class Person extends Realm.Object {

}

➤ Lyubomir Blagoev commented:

closing this issue as stale

This error seems to be still happening in 10.3.0 - we have just migrated our code to be compatible with the version 10.x.x from 3.x.x and are facing this issue. If we do not use a debugger (RN Debugger, Google Chrome debugger) it works as expected.

Model

export class User extends Realm.Object {
  static REGISTERED: number = 0;
  static GUEST: number = 1;
  static NOT_ACTIVATED: number = 2;

  static schema = {
    name: "User",
    primaryKey: "id",
    properties: {
      id: "int",
      etc...
    }
}

Accessing an object instance

const users = realm.objects("User");
console.log("Loaded", users[0]);

lib/browser/objects.js (the error is thrown here)

Snímek obrazovky 2021-04-02 v 15 12 47

Console output

Snímek obrazovky 2021-04-02 v 15 12 06

Error

Snímek obrazovky 2021-04-02 v 15 18 32

Anybody knows the reason (or a fix)?

I created an issue from this comment #3673

Was this page helpful?
0 / 5 - 0 ratings

Related issues

ugendrang picture ugendrang  ·  3Comments

matt2legit picture matt2legit  ·  3Comments

fever324 picture fever324  ·  4Comments

timanglade picture timanglade  ·  3Comments

max-zu picture max-zu  ·  3Comments