2017-11-23 17 views
0

他のレデューサーでアクションをディスパッチする方法。 たとえば、私はスイッチケースADD_LOGREMOVE_LOGで減速器LogsReducerを作成します。コード:他のレデューサーでアクションをディスパッチするReactJS/Reduxコール

const addLog = (text) => ({type: 'ADD_LOG', text}); 
const removeLog = (id) => ({type: 'REMOVE_LOG', id}); 

const logsReducer = (state = {}, action) => { 
    switch (action.type) { 
    case 'ADD_LOG': 
     // todo 
    case 'REMOVE_LOG': 
     // todo 
    default: 
     return state; 
    } 
}; 

と私はcombineReducerslogsReducerを追加します。 アクションをディスパッチするには、mapDispatchToPropsの中でこれを呼び出します。

dispatch(addLog('sample log')); 
dispatch(removeLog(2); 

ここで質問します。ログ減速装置の外部からのメッセージのディスパッチを許可する方法。例えば、他の減速機でのフェッチ応答から。 contactReducer

+2

すべてのアクションはすべてのレデューサーに送信されます。したがって、 'action.type'が' ADD_LOG'の場合、 'contactReducer'も' switch 'できます。 –

+0

あなた自身が尋ねなければならない唯一の質問は、あなたの行動が特定の順序で実行されなければならない場合です。そうでなければ@DavinTryon彼の答えは必要なものです。いくつかの種類のミドルウェア – Icepickle

+0

しかし、contactReducerは、異なるレデューサーです。そして、このケースは 'switch'にはありません。あなたは知っている、私はユーザーのイベントを記録し、それを状態にキー 'ログ'(logsReducer) –

答えて

0

ログレデューサーの外部からのメッセージのディスパッチを許可する方法。例えば、他の減速機でのフェッチ応答から。 contactReducer?

通常、非同期API呼び出しの存在や行動ディスパッチキューは、そのプレゼンテーション/ドメインロジックはある意味プロセスで構成されて、そのプロセス・マネージャはそのタスクを解決するために必要とされます。

一般的な解決策は、ミドルウェアとライブプロセスマネージャを組み合わせたredux-sagaです。 sagaを使用すると、コンポーネントは論理的に起こったアクションについて通知し、その後、サガはAPI呼び出しを実行し、新しいアクションを生成し、さらにOptimistic updatesを実行します。

(その https://github.com/reimagined/resolveようないくつかのツールを使用する場合)あなたにも同型のバックエンドのコードを取得するフロントエンドのコードを書くことによって:あなたのWebアプリケーションが自動的にフルスタックのイベントソースのアプリケーションとなって redux+sagaアプローチでも

sagaを使用したプラクティスを参照Infinite loop with redux-sagahow to setstate after saga async request

関連する問題