React Native Realm迁移

yb3bgrhw  于 6个月前  发布在  React
关注(0)|答案(3)|浏览(61)

在React Native中,你应该在哪里放置迁移代码或删除realm数据库的代码(忽略迁移),并且只运行一次?
我尝试删除Realm数据库每次我回到登录屏幕.当我尝试登录,它应该保存用户信息到Realm,然后应用程序照常进行.然而,这不是事实,似乎因为Realm数据库被删除,它没有保存它.我以为一旦我登录,通过保存用户信息到Realm,它将初始化Realm,然后在Realm中保存用户。
在调试模式下,似乎即使删除了Realm数据库,一切功能都正常。调试模式要慢得多,所以在某个地方有时间问题吗?
有没有初始化Realm的方法?

q9rjltbz

q9rjltbz1#

这就是我让迁移工作的方法。
我把realm.js放在/src中,我把所有的react文件都放在那里。当我需要使用我的领域时,我把import realm from 'path/to/realm.js';放在realm.js中,我有我的旧模式和新模式。

import Realm from 'realm';

const schema = {
    name: 'mySchema',
    properties: {
        name: 'string',
    }
};

const schemaV1 = {
    name: 'mySchema',
    properties: {
        name: 'string',
        otherName: 'string',
    }
};

字符串
注意它们有相同的名字。然后在我的realm.js的底部,我曾经有export default new Realm({schema: [schema]});
我现在有这个:

export default new Realm({
    schema: [schemaV1],
    schemaVersion: 1,
    migration: (oldRealm, newRealm) => {
        // only apply this change if upgrading to schemaVersion 1
        if (oldRealm.schemaVersion < 1) {
            const oldObjects = oldRealm.objects('schema');
            const newObjects = newRealm.objects('schema');

            // loop through all objects and set the name property in the new schema
            for (let i = 0; i < oldObjects.length; i++) {
                newObjects[i].otherName = 'otherName';
            }
        }
    },
});


如果你不需要迁移数据,你可以用新的模式版本和新的模式打开Realm,它也应该工作。

tp5buhyn

tp5buhyn2#

如果您刚刚添加或删除了schema的字段,则可以执行空迁移。这是我的realm.js文件:

import Realm from 'realm';
//models
import Registros from '../models/registros';
import Local from '../models/local';

export default function getRealm() {

   return Realm.open({
      schema: [Registros, Local],
      schemaVersion: 1, //add a version number
      migration: (oldRealm, newRealm) => {

   },
});

字符串
}

wribegjk

wribegjk3#

只需将schemaVersion={2}添加到RealmProvider

相关问题