2017-03-17 5 views
1

In Reactive Native: Wo soll der Migrationscode oder der Code zum Löschen der Realm-Datenbank abgelegt werden (Migration ignoriert) und nur einmal ausgeführt werden?Native Realm-Migration reaktivieren

Ich habe versucht, die Realm-Datenbank jedes Mal zu löschen, wenn ich wieder auf dem Anmeldebildschirm bin. Wenn ich mich anmelde, sollten die Benutzerinformationen in Realm gespeichert werden und dann wird die App normal fortgesetzt. Dies ist jedoch nicht der Fall. Es scheint, dass die Realm-Datenbank gelöscht wurde und nicht gespeichert werden kann. Ich hätte gedacht, dass sobald ich mich anmelde, indem ich die Benutzerinformationen in Realm speicherte, Realm initiierte und dann den Benutzer in Realm speicherte.

Im Debug-Modus scheint es sogar durch das Löschen der Realm-Datenbank funktioniert alles normal. Debug-Modus ist viel langsamer, gibt es also ein Timing-Problem irgendwo?

Gibt es eine Methode, um Realm zu initialisieren?

+0

Verwenden Sie Realm mit Synchronisierung (die Realm Mobile Platform)? Oder ist Ihr Benutzer etwas, das Sie selbst verfolgen? Normalerweise würden Sie Ihre Realm-Dateien nicht immer löschen, es sei denn, Sie verwenden sie zum Caching oder Ähnlichem. –

+0

Ich benutze nur das Realm-Javascript für React Native. Mein Problem ist, dass Sie, wenn sich das Schema ändert, mit der Migration umgehen. Wo genau setzen Sie den Code dafür? Ich muss die Migration nicht immer durchführen, das Löschen des Bereichs und das erneute Initialisieren ist ausreichend, aber das scheint nicht zu funktionieren. Wenn der Benutzer die App im Laden herunterlädt und ich dann das Schema für das nächste Update aktualisiere, was würde passieren? Wird die Realm-Datenbank nach der Neuinstallation entfernt? Wenn ja, würde das funktionieren. Wenn nicht, wird es ein Problem sein. – fes

+0

Werfen Sie einen Blick auf den Abschnitt [Migrationen] (https://realm.io/docs/javascript/latest/#migration) in der Dokumentation. Hilft dir das? –

Antwort

2

Dies ist, was ich getan habe, um die Migration zu arbeiten.

Ich habe realm.js in /src wo ich alle meine react-Dateien zu halten. Wenn ich mein Realm verwenden muss import realm from 'path/to/realm.js'; In realm.js habe ich mein altes Schema und mein neues Schema.

import Realm from 'realm'; 

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

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

Hinweis sie haben den gleichen Namen. Dann an der Unterseite meines realm.js, wo ich diese export default new Realm({schema: [schema]});

Ich habe jetzt verwendet haben:

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

Wenn Sie nicht die Daten wandern müssen, könnten Sie öffnen einfach das Reich mit dem neuen Schema Version und neues Schema und es sollte auch funktionieren.

Verwandte Themen