2016-10-14 1 views
2

Ich bin neu in Redux und sah Redux-Aktionen oder mit Switch-Anweisungen in Reducer, und obwohl ich nicht gegen eine Switch-Anweisung bin, frage ich mich, ist es nicht einfacher, einfach den Aufruf der Aktionsmethode zu verwenden?Redux - Verwenden Sie Action-Objekt-Methode in Reduzierer anstelle von Schalter

Hier ist, was ich denke

import actions from './actions' 

const reducer = (state = {}, action) => { 
    if (actions[action.type]) return Object.assign({}, 
     state, actions[action.type](action) 
    ); 
    return state; 
} 

Ich habe das bei meinem ersten Minderer und Aktion nur getestet, und es funktioniert, aber es scheint ziemlich offensichtlich, so frage ich mich, warum der Schalter Typ der ist gewählter Weg?

+0

1. Ihre Aktion sollte das vorhandene Statusobjekt als Argument verwenden, oder? 2. Der Schalterfall ist nur eine stilistische Entscheidung. Sie können alles tun, solange Ihre Reducer-Funktion ein neues Statusobjekt zurückgibt. Was immer sich sauberer anfühlt :) – iamnat

Antwort

1

Einige Beobachtungen:

  1. Sie beziehen sich auf diese externen Funktionen nicht als "Aktionen". Sie sind keine Aktionen. Sie sind eigentlich Reduzierer selbst.
  2. Als Reduzierer sollten Sie das Zustandsobjekt an sie weitergeben. Oft möchten/müssen Sie die im aktuellen Status enthaltenen Informationen sowie die im Aktionsobjekt enthaltenen Informationen verwenden.

Ansonsten scheint dies ein geeigneter Ansatz.

+1

Der Unterschied zwischen 'switch' und einem Objekt (hash) mit Funktionen ist vernachlässigbar. Die 'Object.assign' sperrt jedoch die Zustandsform auf ein Objekt und erlaubt keine Löschungen. Es wird einfach nicht für eine allgemeine Lösung tun. – DDS

+1

Das stimmt. Aber ich halte die Zustandsform trotzdem immer gleich. Für den Rest meiner App wäre es problematisch, wenn Reduktoren die Zustandsform beliebig verändern würden. –

+0

Manchmal ist ein Array besser geeignet als ein Objekt. – DDS

2

Switch-Anweisungen sind sicherlich der gängigste Ansatz, aber Lookup-Tabellen sind auch üblich. Sie können sogar einfache Wenn/Dann-Bedingungen verwenden, wenn Sie möchten. Letztlich liegt es an Ihnen, wie Sie Ihre Reduzierungen schreiben.

FYI, dieses Thema ist in der Redux FAQ, in der FAQ: Reducers Abschnitt abgedeckt. Vielleicht möchten Sie auch den neuen Abschnitt "Structuring Reducers" How-To lesen.

Verwandte Themen