2016-04-27 5 views
1

私は状況がある場合:コンポーネントは3操作(すべての情報||検索が必要な情報||フィルタ情報)を持っていますが、これらの操作はすべて同じAPIに依存します。Reduxアクションを設計する際に最も重要な考慮事項は何ですか?

Reduxアクションを設計する最良の方法は何ですか? 3つの操作をマッピングしている3つのアクションを設計するには? 1つのAPIだけで1つのアクションしかない場合

Reduxアクションを設計する際に最も重要な考慮事項は何ですか?

答えて

0

1つか2つか3つのアクションかどうかは、あなたのレデューサーの編成方法とUIがあなたの店舗にどのように接続されているかによって大きく異なります。

API呼び出しは、アクション自体の副作用ではなく、アクションそのものと考えるべきです。あなたのreduxストアはあなたのUIの特定の状態を保持しています:どのフィルタがアクティブですか?現在の検索クエリは何ですか? ...

アクションを設計する際の最も重要な考慮点は、自分のUIの状態はどういう意味ですか?彼らはそれにどのような影響を与えていますか?彼らは私の店の状態にどのように関係していますか?

APIコールコードを相互に関係させることを心配している場合は、それを処理するさまざまなパターンがあります:パラメータを取る簡単なヘルパー関数を使用し、redux-sagaなどを使用して副作用などをトリガーします。 APIコールは、アクションを設計する際には関係がありません。

+0

ありがとう:)私は、私のシステムをより重視し、それをより良く構築することを理解しました。 – honoka

0

アクションがAPIエンドポイントにマップする必要があることを示すドキュメントはありません。したがって、APIエンドポイントの数を考える必要はありません。 http://redux.js.org/docs/basics/Actions.htmlから

アクションは、お店にご アプリケーションからデータを送信する情報のペイロードです。あなたのケースでは

ペイロードを持つつのアクションが結果を達成し、所望の状態にあなたのstateを変異させることができればしかし、私は3を使用する理由を参照してください(ひいては3つのレデューサー、などを持って)いません。

+0

"3つのアクションは3つのレビュアーを意味するものではありません.1つのレデューサーが3つのアクションを非常にうまく処理できるようになりました – VonD

+0

私は再びドキュメントを参照するべきです:) – honoka

0

reduxのドキュメントには、非同期アクション/ APIの使用法がreduxアプリケーション内でどのように機能するかに関する良いセクションがあります。

http://redux.js.org/docs/advanced/AsyncActions.html

私はサンクミドルウェアを使用して、このパターンを踏襲し、そしてそれは本当にうまく動作することがわかってきました。アイデアは、あなたの行動に機能を返す能力を与えることです。

  • アプリケーションがAPI呼び出しを行い、API呼び出しを行い、結果を処理する "main"関数です。
  • API呼び出しに関連する情報をレデューサーに渡す2つの純粋なアクションクリエータ(タイプとその他のプロパティの数を含むオブジェクトを返す関数)。

アクション:

/* Inside ./action.js */ 

/* This is the function you will dispatch from another component (say, a container component. This takes advantage of thunk middleware. */ 

export function fetchAllInfo() { 

    return function(dispatch) { 
    dispatch(requestAllInfo()) 

    /* Import your API function, make sure it takes a callback as an argument */ 
    API.fetchAllInfo((allinfo) => { 
     dispatch(receiveAllInfo(allinfo)) 
    } 
} 

/* Pure action creators */ 
function requestAllInfo() { 
    return { 
    type: "REQUEST_ALL_INFO", 
    } 
} 

function receiveAllInfo(allinfo) { 
    return { 
    type: "RECEIVE_ALL_INFO", 
    allinfo, 
    } 
} 

減速:サンクミドルウェア(または非同期ディスパッチに対処するための独自の方法)と、各API呼び出しのコールバックを持つので

/* Inside ./reducer.js */ 

export function inforeducer(state, action) { 
    switch(action.type) { 
    case "REQUEST_ALL_INFO": { 
     return Object.assign({}, state, { 
     /* This can be passed as prop so a component knows to show a loader */ 
     isFetching: true, 
     }) 
    case "RECEIVE_ALL_INFO": { 
     return Object.assign({}, state, { 
     isFetching: false, 
     allInfo: action.allInfo, 
     }) 
    } 
    default: 
     return state 
    } 
} 

、あなたこのメソッドを使用して、呼び出しの開始時と結果を受け取るときにAPI呼び出しをディスパッチすることができます。

関連する問題