2017-10-12 6 views
0

reactxコードを簡略化するためにredux-actionsを使いたいのですが、私は質問があります:還元アクションによるREQUEST/STARTアクションの表現方法は?

私は「リモート」からいくつかのトピックをフェッチする "ロード"アクションがあると言います。そのコードは次のようになります。

const load = createActions('LOAD'); 

export function fetch() { 
    return (dispatch, getState) => { 
    dispatch(fetchTopicsRequest()); // <- here is my question. 
    return network 
     .request('/topics?' + qs.stringify(getState().topics.filter.options)) 
     .then(network.handleResponse) 
     .then(result => dispatch(load(result)))  // <- here I got the topics in the payload 
     .catch(error => dispatch(load(error)));  // <- here I got the errors in the payload, in the reducer I check on the "error" field to see if the request successed. 
    }; 
} 

私はそれが結果やエラーワンアクションで派遣されてを持って良いことだと思います。しかし、同じアクションでステータスを「要求する」ことはどうですか?上記のコードのように、私はそれを理解しなかったので、別のアクション "fetchTopicsRequest()"を作らなければなりません。これはコード全体が変わっているように見えます。

私は初期の不調から「ステータス」フィールドがあることに気付きました。そのような場合には便利かもしれません。それはどこに行きましたか?または私はちょうど良いアイデアを逃した?

おかげ

答えて

0

まず、私はあなたがアクションとして呼んでいるもののご理解を修正したいと思います。あなたのケースでは、関数fetch()は、アクションのディスパッチが可能なアクションクリエータです。load(result)load(error)は、ディスパッチされる実際のアクションです。

ここで、あなたはあなたのfetchTopicsRequest()アクションのより良い実装を探していますので、私は、従来の方法でアクションを書くことをお勧めします。

dispatch({type: 'FETCHING_TOPICS'}); 

今、あなたはあなたの減速で、このアクションをキャプチャして、あなたのtopicsは何をフェッチしている間に行うことができます。このようなものになるだろう、あなたの場合。

UPDATE:

アクションと減速機の構成を使用することができますpendingケースを扱うために。 FETCHING_TOPICSアクションがあなたの減速で、その後送出されたら、あなたはtrueとしてpendingをマークすることができますし、responseが受信されると、あなたは、このようにfalsependingを変更することができます。

function reducer(state={pending: null}, action) { 
    switch(action.type) { 
    case 'FETCHING_TOPICS': 
     return {...state, pending: true}; 
     break; 
    case 'FETCHED_TOPICS': 
     return {...state, pending: false, //payload if any}; 
     break; 
    case 'FETCHING_ERR': 
     return {...state, pending: false, //payload if any}; 
     break; 
    } 
} 
+0

ああ、あなたの権利。私はさらにそれを修正することができます: 'load(result)'と 'load(error)'もアクションクリエータです。本当のアクションは普通のオブジェクトが実際にディスパッチされたことです。 私が言いたいのは、アクションのステータスを表す 'error'フィールドがありますが、'保留中 'ステータスを表す方法がないことです。私がそのような地位を知る必要がある場合、それを表現する最善の方法は何ですか? –

+0

このようなケースを処理する最善の方法は、アクションとレデューサーのコンボを使用することです。したがって、 '' FETCHING_TOPICS''アクションをディスパッチしているときは、あなたのレデューサーで '' '' '' ''とマークして、 '' 'result'' ''または '' '' ''のアクションを実行すると、あなたのレデューサーの '' '' '' '' '' ''に '' '' '保留中' 'を変更できます。私は答えをもう少し冗長に更新します。 –

+0

申し訳ありません。私は、私が「還元行為」について話していることを明確にしていないと思う。ボイラープレートコードを減らすためのライブラリ私は3つのアクションのパターンを知っている、私はちょうど私のコードベースを簡素化するためにreduxアクションを使用したい。 –

関連する問題