2016-07-23 11 views
2

Was ist "let x = something1 => something2 => something3"?Was ist Doppelpfeilfunktion?

Ich habe diesen Code und ich verstehe nicht, was es tut.

const myReducers = {person, hoursWorked}; 
const combineReducers = reducers => (state = {}, action) => { 
    return Object.keys(reducers).reduce((nextState, key) => { 
    nextState[key] = reducers[key](state[key], action); 
    return nextState; 
    }, {}); 
}; 

Der vollständige Code einhüllen Sie brauchen:

//Redux-Style Reducer 
const person = (state = {}, action) => { 
    switch(action.type){ 
    case 'ADD_INFO': 
     return Object.assign({}, state, action.payload) 
    default: 
     return state; 
    } 
} 

const infoAction = {type: 'ADD_INFO', payload: {name: 'Brian', framework: 'Angular'}} 
const anotherPersonInfo = person(undefined, infoAction); 
console.log('***REDUX STYLE PERSON***: ', anotherPersonInfo); 

//Add another reducer 
const hoursWorked = (state = 0, action) => { 
    switch(action.type){ 
    case 'ADD_HOUR': 
     return state + 1; 
    case 'SUBTRACT_HOUR': 
     return state - 1; 
    default: 
     return state; 
    } 
} 
//Combine Reducers Refresher 

****HERE**** 
****HERE**** 
****HERE**** 

const myReducers = {person, hoursWorked}; 
const combineReducers = reducers => (state = {}, action) => { 
    return Object.keys(reducers).reduce((nextState, key) => { 
    nextState[key] = reducers[key](state[key], action); 
    return nextState; 
    }, {}); 
}; 


**** 
**** 


/* 
This gets us most of the way there, but really want we want is for the value of firstState and secondState to accumulate 
as actions are dispatched over time. Luckily, RxJS offers the perfect operator for this scenario., to be discussed in next lesson. 
*/ 
const rootReducer = combineReducers(myReducers); 
const firstState = rootReducer(undefined, {type: 'ADD_INFO', payload: {name: 'Brian'}}); 
const secondState = rootReducer({hoursWorked: 10, person: {name: 'Joe'}}, {type: 'ADD_HOUR'}); 
console.log('***FIRST STATE***:', firstState); 
console.log('***SECOND STATE***:', secondState); 

Von: https://gist.github.com/btroncone/a6e4347326749f938510

+1

Es ist nur eine Reihe von Funktionen als Argumente übergeben. Die Funktion der obersten Ebene, nehme ich an, wird irgendwann mit Ihrer Karte von Reduzierern aufgerufen. –

+0

Können Sie einen Link senden, der das erklärt oder besser erklärt, was meinst du? –

+0

Erklären was speziell? Pfeilfunktionen werden in den ES2015-Dokumentationen/-Tutorials erläutert. 'reduce' hat normale Funktionsdokumente. Fragen Sie nach dem Redux-Teil? –

Antwort

1

let x = something1 => something2 => something3 ist fast die gleiche wie die folgenden:

let x = function (something) { 
 
    return function (something2) { 
 
    return something3 
 
    } 
 
}

Der einzige Unterschied ist, Pfeile lexikalische Bindung von this haben, dh die Bindung in der Kompilierung Zeit.

+0

macht x = something3 am Ende des Prozesses? –

+1

Nein. 'X' ist jetzt ein Funktionsausdruck. Wenn Sie anrufen, lassen Sie abc = x(). Dann abc werden wir gleich etwas3 –

+0

Okay, ich habe es. Danke für deine Antwort, Kumpel! –

3

Ein Pfeil Funktion

someParameters => someExpression 

Also, was

someParameters => someThing => someThingElse 
ist

???

Nun, durch einfaches dummes "Pattern-Matching", es ist ein Pfeil Funktion, deren Körper (someExpression) ist

someThing => someThingElse 

Mit anderen Worten, es ist

someParameters => someOtherParameters => someExpression 

Es gibt nichts besonderes über diese. Funktionen sind Objekte, sie können von Funktionen zurückgegeben werden, unabhängig davon, ob diese Funktionen mit Pfeilen oder dem Schlüsselwort function geschrieben wurden.

Das einzige, was Sie wirklich wissen müssen, um diese richtig zu lesen ist, dass der Pfeil rechts-assoziativ ist, IOW, dass

a => b => c === a => (b => c) 

Hinweis: Ein Pfeil Funktion kann auch einen Körper von Aussagen aus sowie einen einzelnen Ausdruck. Ich habe mich speziell auf die Form bezogen, über die das OP verwirrt ist.

+0

Vielen Dank für Ihre Zeit und gute Antwort, aber ich wählte das andere, weil es aus irgendeinem Grund für mich klarer war. Danke Agian. –

+0

Das ist okay, meine Antwort geht davon aus, dass man bereits weiß, was eine Pfeilfunktion ist, erklärt Aakash's ohne Pfeilfunktionen. –