2016-12-07 2 views
2

Warum verwenden Sie nicht eine einzige Reducer-Funktion, um Entitäten zu einem Redux-Store hinzuzufügen, zu aktualisieren und zu entfernen? Es könnte einfach eine action.payload.table-Eigenschaft verwenden, um die richtige "Tabelle" zu identifizieren, die im Geschäft verwendet werden soll.Verwenden Sie einen einzigen Redux Reducer für alle CRUD-Aktionen?

Ich habe dieses Muster noch nie in Beispielen, Blog-Posts usw. gesehen. Im Gegenteil, die meisten Beispiele haben Aktionen zum Umschalten eines einzelnen Feldes auf einer Entität, wie zum Beispiel ein "Fertig" -Flag auf einem Todo. Die Menge an Wiederholungen, die in einer großen App erforderlich wäre, hat mich davon abgehalten, Redux zu verwenden, also hoffe ich, dass dies machbar ist.

Zum Beispiel:

function entityReducer(state, action) { 

    //Action payload includes the entity "type" or "table" name 

    switch(action.type) { 
    case 'CREATE_ENTITY': { 
     ... 
    } 
    case 'UPDATE_ENTITY': { 
     ... 
    } 
    ... 
    } 
} 
+0

Normalerweise ist das die Art, wie Sie einen Reducer strukturieren, und es werden immer noch 4 Aktionen benötigt :) Schauen Sie sich MobX an, vielleicht mehr nach Ihrem Geschmack. –

+0

@OriDrori bietet MobX generische CRUD Reducer für Objekte? es war nicht klar für mich nach einem kurzen Blick auf MobX – ciekawy

+0

@ciekawy - MobX ist ein anderer Staats-Manager. Es ist kein Reducer. –

Antwort

1

Ja, das ist durchaus lebensfähig. Ich habe tatsächlich etwas ähnliches in meiner Produktion App, wo ich itemType, itemID und möglicherweise newItemAttributes Felder in der Aktion nach Bedarf weitergeben. Das heißt, ich verwende auch Redux-ORM als Abstraktionsschicht für die Handhabung von Updates innerhalb dieser Reducer. Ich habe geschrieben a couple posts about using Redux-ORM auf meinem Blog.

Sie könnten auch interessiert sein an der Structuring Reducers Abschnitt in der Redux-Dokumentation, die über Möglichkeiten zur Wiederverwendung Reducer-Logik spricht.

+0

Froh zu hören, dass dies machbar ist. Warum enthalten fast alle Beispiele eine Aktion, die ein einzelnes Feld in einer einzelnen Entität aktualisiert? –

+0

Ich weiß nicht, ich habe diese Beispiele nicht geschrieben :) Wahrscheinlich aus dem gleichen Grund, dass die meisten Framework-Demos eine andere TodoMVC-Implementierung sind - es ist einfach und zeigt die grundlegenden Ideen. – markerikson

Verwandte Themen