2016-06-21 5 views
0

書き込み動作と減速効率でクリーンな(Reduxのを反応させる)

アクション:

import { OPEN_NODE, CLOSE_NODE, GET_NODES } from '../constants/NodeActionTypes'; 

export function openNode(path) { 
    return { 
    type: OPEN_NODE, 
    path: path 
    }; 
} 

export function closeNode() { 
    return { 
    type: CLOSE_NODE 
    }; 
} 


export function getNodes(path) { 
    return { 
    type: GET_NODES, 
    path: path 
    }; 
} 

減速:明らか

export default function opener(state = initialState, action) { 
    switch (action.type) { 
    case OPEN_NODE: 
    var { path } = action 
    var {nodes} = getFileList(path) 
    return { 
     ...state, 
     open:true, 
     nodes:nodes 
    }; 
    case CLOSE_NODE: 
    return { 
     ...state, 
     open:false 
    }; 
    case GET_NODES: 
    var { path } = action 
    var {nodes} = getFileList(path) 
    return { 
     ...state, 
     nodes:nodes 
    }; 
    default: 
    return state; 
    } 
} 

OPEN_NODEのみ(GET_NODESが含まれていますプラスopen:true)、コードを整理する多くの方法があるようです:

  1. パックGET_NODESレデューサーには、OPEN_NODEでこれを呼び出し、open:trueを追加します。

  2. 変更openNodeアクションの場合は、switch(action.type)さんのケースをどうやって書くのですか?[OPEN_NODE, GET_NODES]と一緒に送信しますか?

  3. OPEN_NODE減速派遣getNodesアクションがGET_NODES減速ベストです

トリガするために聞かせて?それとももっと良い方法ですか?

+0

。あなたに正しい方向を教えてください:https://egghead.io/courses/getting-started-with-reduxこのコースを理解することで、4つのすべての控除問題を解決することができます。 – xiaofan2406

答えて

0

あなたは、単に両方のアクションを実行するためにswitch文を使用することができます。

export default function opener(state = initialState, action) { 
    switch (action.type) { 
    case OPEN_NODE: 
    case GET_NODES: 
    var { path } = action 
    var {nodes} = getFileList(path) 
    return { 
     ...state, 
     nodes:nodes 
     open: action.type === OPEN_NODE ? true : state.open 
    }; 
    case CLOSE_NODE: 
    return { 
     ...state, 
     open:false 
    }; 
    default: 
    return state; 
    } 
} 
+0

私はそれが良い方法だとは思わない。 'OPEN_NODE'が将来もっと多くの状態を必要とするか、' OPEN_NODE_2'の呼び出しが新しい状態 'open2'が必要な場合、コードは' action.type === xxx? true:xxx' – Mithril

+0

このパターンを何度も見ると、効果的にリファクタリングする必要があります。しかし、あなたの特定のユースケースについては、それは実際に悪いことではありません。 – Pcriulan

1

あなたのswitchステートメント内のすべてのものを維持する必要はありません。 2つの同様のアクションがある場合は、リファクタをプライベート関数に置き換えて呼び出します。あなたのケースでは

、それはのようなものかもしれません:あなたは、本質的にあなたの減速を構成する方法を求めている

// your reducer helper 
const getNodes = (state) => { 
var { path } = action 
var {nodes} = getFileList(path) 
return { 
    ...state, 
    nodes:nodes 
}; 
}; 

// your reducer function 
export default function opener(state = initialState, action) { 
    switch (action.type) { 
    case OPEN_NODE: 
    return { ...getNodes(state), open:true }; 
    case GET_NODES: 
    return getNodes(state); 
    // .... 
} 
+0

ええ、私はオプション1も良いと思っていますが、オプション2と3について考えてみませんか?利点と欠点は何ですか? – Mithril

関連する問題