2016-05-26 3 views
1

Was ich verstehe, ist, dass es ein Konzept der „reinen Funktionen“, die ich in diesem video und diese Frage erklärt wurde What is pure functions?Was ist ein reines Reduzierstück?

Jedoch habe ich die Bezeichnung „reine Reduzierungen“ im Zusammenhang mit Fluss/Redux angetroffen habe ich gelesen auf this link

Aber ich bin mir nicht ganz sicher, wie man dieses "reine Konzept" auf Reduzierstücke anwendet, was ist ein reines Reduzierstück?

+2

ein Reducer ist eine Funktion. eine bestimmte Art von einem, aber nur eine Funktion. gleiche Sache. Eine Rose mit einem anderen Namen ... – dandavis

+0

Reducer ist eine Funktion, das ist nur ein spezifischer Name. –

Antwort

4

Hier ist mein Verständnis, in Bezug auf Redox ein Reduzierer ist eine Funktion, die zwei Argumente akzeptiert (Zustand, Aktion).

1. state represents the current state of the application in store 
2. action represents the action that triggered 

Redux geht davon aus, dass die Reduzierungen den aktuellen Zustand akzeptiert und den Staat nicht mutieren, sondern gibt den neuen Zustand, auf dem Aktionstyp abhängig. Wenn es haftet und den Zustand nicht mutiert, dann ist es ein reiner Minderer.

/********************** Beispiel eines reinen Reduzierers ****************** ***********/

var initialState = {counter:0}; 
function counterReducer(state = initialState, action){ 
    if (action.type === 'INCREMENT'){ 
     // returns a new state incrementing a counter 
     return {counter:state.counter + 1}; 
    } 
    else if (action.type === 'DECREMENT'){ 
     // return a new state decrementing a counter 
     return {counter:state.counter - 1}; 
    } 

    // returns the state as is 
    return state; 
} 

die obige Funktion hat keine Nebenwirkungen, wenn sie mit dem gleichen Satz von Argumenten aufgerufen wird, ist es immer die gleiche Leistung zurückgibt.

/********************* Beispiel eines unreinen Minderer ******************* ********/

var initialState = {counter:0}; 
function counterReducer(state = initialState, action){ 
    if (action.type === 'INCREMENT'){ 
     // modifies state by mutating or incrementing the counter in state 
     state.counter++; 
    } 
    else if (action.type === 'DECREMENT'){ 
     // modifies state by mutating or decrementing the counter in state 
     state.counter--; 
    } 

    // returns the state 
    return state; 
} 
0

ein Reducer ist einfach eine Funktion, die als ein Argument an die Reduce-Funktion eines Arrays übergeben wird. Zum Beispiel:

const sumReducer = (acc, x) => acc + x 
const multReducer = (acc, x) => acc * x 

const sumResult = [1,2,3,4,5].reduce (sumReducer, 0) 
const multResult = [1,2,3,4,5].reduce (multReducer, 1) 

Das ist im Grunde ein Reducer.