2016-08-18 24 views
0

docsの反応例を反応還元型として学習していますが、reducerではなく、actionsになぜnextTodoのIDが保持されているのかわかりません。 todosが追加されるとそれが時間外に変化するため、これを状態と見なすべきではありませんか?私にとっては、アクションの目的は、ユーザーからの入力を取得し、それをアクションに変換し、状態を生成することではありません。状態を作り、それに与えられた行動に従ってそれを変えるのは、減速家の仕事です。還元還元剤に含まれる反応還元反応には、状態が含まれています

アクションコード

let nextTodoId = 0 

export const addTodo = (text) => { 
    return { 
    type: 'ADD_TODO', 
    id: nextTodoId++, 
    text 
    } 
} 

減速は、純関数であることが予想されるためだリデューサーコード

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

答えて

3

。つまり、同じパラメータで複数回実行すると、同じ結果が返され、残りのアプリケーションの状態は変更されません。

この理由から、レデューサーはIDを特定することができないため、IDを特定するかのように、繰り返し実行で異なる結果(異なる戻り値)が発生します。

還元剤の仕事は状態を作成することではありません。既存の状態とデルタ(つまりアクション)を取得して新しい状態を返すのが仕事です。そしてそれは確実にそうするべきです。

+0

ですから、アクションから状態を作成するのが一般的です。コンポーネントがコントローラの役割を担当しているように見えますが、店舗はモデルですが、状態の作成がどこで起きるかはわかりません – mangocaptain

+0

代わりにコンテナコンポーネントでこのロジックを実行しないことをどのように知っていますか?なぜそれを行動に残すのですか – mangocaptain

+0

'nextTodoId'は状態の一部ではないでしょうか?状態がすべてのアプリケーション状態を含むと想定されている場合、なぜそれが状態外の変数として定義されているのかわかりません。これはまた、減速機の機能が純粋なままであることを可能にする。 – lammert

関連する問題