Realm.open vs new Realm

时间:2018-02-07 16:18:36

标签: javascript react-native realm

在React Native应用程序的上下文中,仅在本地使用Realm(因此暂时不使用域对象服务器)。使用开放领域有什么区别 Realm.open({schema: [Car, Person]})并使用new Realm({schema: [Car, Person]});创建新的Realm实例我应该何时使用其中一个?

看起来Realm.open只是一个回调,以确保同步完成,所以只需要同步的领域?

到目前为止,这是我发现的:

Realm.open:

根据doc reference Realm.open表示"与承诺异步打开一个领域。如果领域同步,它将在可用之前完全同步。" 它是js docs

中显示的方式

new Realm:

根据doc reference中的构造函数,new Realm创建一个新的Realm实例[...]。如果一个领域尚不存在[...],那么这个构造函数将创建它。否则,实例将访问现有的Realm

在React示例中,他们使用new:https://github.com/realm/realm-js/blob/master/examples/ReactExample/components/realm.js

2 个答案:

答案 0 :(得分:3)

您有什么具体的用例吗?否则反应原生我到目前为止还没有必须使用Realm.open。 他们看到大多数人接近这个架构的方式就是拥有一个名为的文件 realm.js 定义模式的位置和导出新的Realm

class ShoppingCartItem extends Realm.Object{}
ShoppingCartItem.schema = {
    name: 'ShoppingCartItem',
    primaryKey: 'ordernumber',
    properties: {
        ordernumber: 'string',
        quantity: 'int',
        unitPrice: 'double'
    }
}

export default new Realm({schema: [User, LastViewedProduct, ShoppingCartItem]});

然后有另一个名为realmTasks.js的文件,您可以在其中导入该领域对象并在其上定义操作。如果您需要本地状态的域对象来注册更改,您可以定义回调并将域引用作为参数提供,例如

export function addShoppingCartItem(ordernumber, quantity, unitPrice, callback){
    realm.write(() => {
        realm.create('ShoppingCartItem', {
            ordernumber: ordernumber,
            quantity: quantity,
            unitPrice: unitPrice
        });
    })
    return callback(realm);
}

我不确定这完全回答你的问题或对你有用,但我希望这会给你一个提示:)

答案 1 :(得分:0)

docs的答案可以完全涵盖您的问题。 因此,使用同步方法(const realm = new Realm())更简单并且更适合于将领域导出为模块,但是当模式迁移和从远程同步时,获得诺言Realm.open()并处理领域实例仍然是可取的  服务器已完成。