2016-08-28 13 views
3

react redux docのtodoの例では、DanはTOGGLE_TODOタイプのアクションをtodosに渡し、それをそれぞれのtodoに渡します。私は彼のロジックがtodoレデューサーにあったtodo.idをチェックしていたことに気付きました。このロジックはtodosでも実行できませんでしたか?私には、仕事をすべてのtodoに渡すのではなく、トグルする必要があるかどうかを把握するよりも、それぞれのtodoを反復するよりも、より高いレベルでロジックを処理する方が良いでしょう。ダンがこのようにした理由はありますか?親減速機対子減速機で行われる反復減算ロジック

const todo = (state = {}, action) => { 
    switch (action.type) { 
    case 'ADD_TODO': 
     return { 
     id: action.id, 
     text: action.text, 
     completed: false 
     } 
    case 'TOGGLE_TODO': 
     if (state.id !== action.id) { 
     return state 
     } 

     return Object.assign({}, state, { 
     completed: !state.completed 
     }) 

    default: 
     return state 
    } 
} 

const todos = (state = [], action) => { 
    switch (action.type) { 
    case 'ADD_TODO': 
     return [ 
     ...state, 
     todo(undefined, action) 
     ] 
    case 'TOGGLE_TODO': 
     return state.map(t => 
     todo(t, action) 
    ) 
    default: 
     return state 
    } 
} 

export default todos 

答えて

1

私はあなたがReduxのソースコードリポジトリからtodomvc exampleを見てみるならば、あなたは一つだけtodos減速を参照してくださいよ、右だと思います。

ドキュメントは少し古いかもしれません。そうしたネストされたレデューサーは、その可能性の例に過ぎません。

0

これは、レデューサーロジックを構造化するための1つの可能なアプローチです。この場合、Danは単一のtodoを更新するケースを処理する関数を定義することを選択し、より高いレベルの反復ロジック内でその関数を使用することで、その関数を複数のケースに対して再利用することができました。