2016-07-19 15 views
1

Ich habe einen MobX-Store-Setup mit einem Observable-Objekt, das Standardwerte hat, und deren Werte vom Server beim Laden der reagierenden nativen Szene aufgefüllt werden. Ich habe eine Liste von beobachtbaren Benutzereinstellungen im UserPreferencesStore wie folgt aus:MobX - Beobachtbares Objekt, das nur geänderte Felder erfasst?

class UserPreferencesStore { 
    @observable userPreferences = { 
     receive_upvotes_mail: 0, 
     receive_answers_mail: 0, 
     receive_comments_mail: 0 
    } 
} 

Auf der RN Seite, diese Werte zu dies zu ändern:

class UserPreferencesStore { 
    @observable userPreferences = { 
     receive_upvotes_mail: 1, 
     receive_answers_mail: 1, 
     receive_comments_mail: 0 
    } 
} 

Ich bin nicht sicher, wie nur das geändert zu bekommen Elemente an den Server senden. Irgendeine Idee? Ist dies auch der effizienteste Weg, Mobx für diese Situation zu verwenden, ein beobachtbares Objekt, selbst wenn ich 20 Felder habe?

Antwort

2

Das ist eine Frage der Schaffung eines separaten Autorun oder Reaktion für jedes Feld sein sollte:

class UserPreferencesStore { 
    @observable userPreferences = { 
     receive_upvotes_mail: 1, 
     receive_answers_mail: 1, 
     receive_comments_mail: 0 
    } 

    constructor() { 
     Object.keys(this.userPreferences).forEach(setting => { 
      reaction(
       // whenever a new value is produced... 
       () => this.userPreferences[setting], 
       // ..run this effect 
       (newValue) => storeSettingOnServer(setting, newValue) 
      ) 
     }) 
    } 
} 
+0

für eine schnelle Antwort danken, fügen Sie es halten, wie es nützlich ist, aber ich habe zwei Fragen. 1. Sobald die Klasse ausgeführt wird, speichert der Konstruktor auf dem Server. Gibt es eine Möglichkeit, die Standardwerte nicht speichern zu lassen, bis sich die Daten tatsächlich geändert haben? Ich habe dies durch eine Warnung (Einstellung) unter // .. getestet, habe diesen Effekt ausgeführt und jede Taste alarmiert, bevor sich etwas geändert hat. 2. Dies funktioniert für Änderungen an Ort und Stelle, Wechselfeld und es wird sofort an den Server übergeben, aber wie kann es mit einer Schaltfläche zum Speichern arbeiten? Wenn Sie Änderungen vornehmen, werden beim Speichern nur die geänderten Felder an den Server gesendet. – Wonka

+0

1. Siehe die Dokumentation, Reaktion wird den Effekt das erste Mal überspringen. 2 Verwenden Sie den gleichen Mechanismus, aber speichern Sie die ausstehenden Änderungen im Speicher und senden Sie die ausstehenden Änderungen an den Server, sobald die Schaltfläche geklickt wird – mweststrate

+0

Vielen Dank, wird weiter erkunden :) – Wonka