2016-04-25 12 views
4

Wird es als schlechte Praxis angesehen, Klassen in diesem Zustand zu speichern? Ich habe gelesen, dass der Zustand leicht serialisierbar sein sollte und Objekte diese Konvention brechen.Speichern von Objekten mit Prototypfunktionen im Redux-Zustand

Ich erstelle eine Webanwendung, die react/redux mit einer Reihe von Backing-Modellen verwendet, um Informationen vom Benutzer zu sammeln.

So zum Beispiel habe ich folgendes Modell:

class Person { 
    constructor(params = {}) { 
    this.firstName = params.firstName || ''; 
    this.lastName = params.lastName || ''; 
    this.gender = params.gender || ''; 
    this.dateOfBirth = params.dateOfBirth || ''; 
    this.stateOfResidence = params.stateOfResidence || ''; 
    this.email = params.email || ''; 
    } 
    validateField(args) { 
    // remove for brevity 
    } 
    valid(args) { 
    // remove for brevity  
    } 
} 

Das Objekt wird in den Laden ergänzt durch die folgenden actionCreator Ausgabe:

export function addPerson(args = {}) { 
    return (dispatch) => { 
    dispatch({ 
     type: 'ADD_PERSON', 
     obj: new Person(args) 
    }); 
    }; 
} 

Die entsprechende Person Minderer es in den Zustand kleben bleibt so Ich kann es vom Rest der Anwendung bekommen.

Auf diese Weise, wenn ich das Objekt aus dem Zustand ergreife, kann ich seine validierten und gültigen Prototypfunktionen ausführen, um zu sehen, ob das Modell gültig ist und angemessen reagiert.

Stimmt diese React/Redux Konvention? Was wäre ein anderer Weg, um dieses Problem anzugehen? Was sind die möglichen Probleme, auf die ich mit dem obigen Ansatz stoßen könnte? Das Recht kann jetzt keine Probleme forsee ... aber ich weiß nicht auch viel Erfahrung mit reagieren/Redux (~ 4 Monate)

Edit:

Ich sollte hinzufügen, dass ich nur mutieren der Objektstatus durch die Reduzierungen. Ich achte darauf, den Status nicht anderswo in der Anwendung zu ändern.

+0

Warum können Ihre Validierungsfunktionen nicht außerhalb der Klasse ausgeführt werden? Ich sehe den Vorteil nicht darin, dass jede Klasse ihre eigenen Validierungsfunktionen hat, wenn sie leicht in eine Reihe von reinen Funktionen ausgelagert werden können. – azium

+0

Ich denke konzeptionell macht es mehr Sinn für mich, sie zusammen zu gruppieren. Auf diese Weise kann das Modell "wissen", ob es gültig ist. – eh0908

+0

Um deine Frage zu beantworten (obwohl es so aussieht, als ob du das schon wüsstest), gilt dies als Verstoß gegen die Konvention/Best Practice. Redux empfiehlt, nur reine JS-Objekte zu versenden. – aray12

Antwort

1

Ja, es wird allgemein als ein Anti-Pattern betrachtet, weil es die Fähigkeit, Dinge wie Time-Travel-Debugging zu tun (eines der wichtigsten Verkaufsargumente von Redux), bricht. Weitere Informationen finden Sie in der Redux-FAQ unter http://redux.js.org/docs/FAQ.html#organizing-state-non-serializable.

Wenn Sie mehr über eine objektähnliche Fassade als über Ihre einfachen Daten verfügen möchten, sollten Sie sich etwas wie https://github.com/tommikaikkonen/redux-orm ansehen.

Verwandte Themen