2017-03-17 82 views
1

在React Native中,您應該在哪裏放置遷移代碼或代碼以刪除領域數據庫(忽略遷移),並且它只能運行一次?React Native Realm遷移

我每次回到登錄屏幕時都嘗試刪除Realm數據庫。當我嘗試登錄時,它應該將用戶信息保存到Realm中,然後應用程序正常進行。但事實並非如此,似乎是因爲Realm數據庫被刪除了,所以沒有保存它的地方。我會想,一旦我登錄,通過將用戶信息保存到Realm中,它將初始化Realm,然後將用戶保存在Realm中。

在調試模式下,甚至通過刪除Realm數據庫,一切正常。調試模式要慢很多,所以有時間問題?

是否有方法來初始化Realm?

+0

您是否正在使用帶同步功能的Realm(Realm Mobile Platform)?或者你的用戶是你追蹤自己的東西? 通常情況下,你不會一直刪除你的領域文件,除非你正在使用它們進行緩存或類似的東西。 –

+0

我只是將Realm javascript用於React Native。我的問題是,如果架構發生變化,您如何處理遷移?你到底在哪裏放置代碼?我並不總是需要執行遷移,刪除領域和重新初始化已經足夠,但似乎並不奏效。如果用戶在商店下載應用程序,然後我更新下一次更新的模式,會發生什麼?在重新安裝後,Realm數據庫會被刪除嗎?如果是這樣,那將起作用。如果沒有,那麼這將是一個問題。 – fes

+0

查看文檔的[migrations](https://realm.io/docs/javascript/latest/#migrations)部分。這對你有幫助嗎? –

回答

2

這就是我所做的遷移工作。

我有realm.js位於/src我在哪裏保留我所有的反應文件。當我需要使用我的領域我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', 
    } 
}; 

請注意它們具有相同的名稱。然後,在我曾經有export default new Realm({schema: [schema]});

realm.js的底部我現在有這樣的:

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'; 
      } 
     } 
    }, 
}); 

如果您不需要遷移數據,你可以只打開境界與新模式版本和新架構,它也應該工作。