2016-07-23 6 views
2

「let x = something1 => something2 => something3」とは何ですか?二重矢印機能とは何ですか?

私はこのコードを持っており、私はそれが何をしているのか理解していません。

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; 
    }, {}); 
}; 

必要包み、完全なコード:

//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); 

から:https://gist.github.com/btroncone/a6e4347326749f938510

+1

これは引数として渡された単なる関数群です。最上位レベルの関数は、ある時点で、あなたの減速機のマップで呼び出されます。 –

+0

これを説明するリンクを送ることができますか、それとも何を意味するのかを説明できますか? –

+0

具体的に説明しますか?矢印の機能については、ES2015ドキュメント/チュートリアルで説明しています。 'reduce'には通常の関数ドキュメントがあります。あなたはReduxの部分について質問していますか? –

答えて

1

X = something1 => something2 => something3は、以下のようにほぼ同じでみましょう。

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

唯一の違いは、矢印、すなわちコンパイルに結合、thisの字句結合を有する、あります時間。

+0

処理の最後にx = something3はありますか? –

+1

いいえ、 'x'は関数式になりました。 let abc = x()を呼び出すとします。それから、abcは何かに等しくなります3 –

+0

わかりました。答えてくれてありがとう! –

3

矢印機能

someParameters => someThing => someThingElse 
何であるか、

ので
someParameters => someExpression 

です

???そのボディ(someExpression)つまり

someThing => someThingElse 

ある

まあ、簡単な愚かな "パターンマッチング" で、それは矢印の機能だが、それはこのことについて何も特別なことはありません

someParameters => someOtherParameters => someExpression 

です。関数はオブジェクトであり、それらの関数が矢印またはfunctionキーワードを使用して記述されていても、関数から返すことができます。注

あなたが本当に適切にこれを読むために知っておく必要がある唯一のことは、矢印が右結合であることで、IOW

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

こと:矢印機能は、文からなる体をも持つことができます単一の式だけでなく、私は特にOPが混乱している形式を指していました。

+0

あなたの時間と偉大な答えをありがとうが、私は他のものを選んだので何らかの理由でそれは私には明らかでした。おかげでagian。 –

+0

それは大丈夫です、私の答えは、矢印機能が何であるかを既に知っていると仮定しています。 –