2017-09-19 44 views
0

私はソケットベースのreact(redux)アプリケーションを実装しようとしています。レデューサーがそれに応じるように、ソケットイベントをストアにディスパッチする必要があります。 は、今私が考える方法は、一つのファイルに保存しておくと、Socketイベントファイルからのものを参照すると、ソケットメッセージが受信されるたびに、その後store.jsにsocket.dispatchReact ReduxアプリケーションでWebソケットを使用するためにミドルウェアが必要です

を経由して格納するためのイベントを発している

import { createStore } from 'redux'; 
let store = createStore(appStore); 
export default store 
SocketJsで

同じ店がプロバイダに小道具として渡されたメインファイルの広告に使用されている

import store from './store'; 
    import io from socketio.client; 

    let Socket = { 
     createSocketIoConnection = function(){ 
     var socket = io(url, {reconnection: false, transports: ['websocket']}); 
     socket.on('data', this.emitToStore); 

     }, 
     emitToStore: function(data){ 
     store.dispatch(); 
     } 

    } 

ファイル

import store from './store'; 
<Provider store={store}> 
    <App> ... 
</Provider> 

ここではミドルウェアを使用していません。これは正しいアプローチです。

+0

うまく見えますが、建築上の決定には1つの答えがありません。 – gravityplanx

答えて

0

いいえ、あなたはは、ミドルウェアを使用するを持っていませんが、ミドルウェアは、行動のこの種を入れて権利場所です。実際には、すでにmany existing websocket middlewares you can useがあります。

+0

私は既にあなたが与えたリンクとreduxドキュメンテーションのページを見ていました。私はここでミドルウェアの使用を何とかしていません。返信いただきありがとうございます。このユースケースでは単純な動作を複雑にしているようです。 reduxサイト(ロガー、クラッシュレポート)によって与えられたミドルウェアの例は、アプリケーション全体で発生したすべてのアクションでミドルウェア機能を呼び出すことができますが、私の場合、ソケットイベントハンドラはそのように動作する必要はありません。それはちょうど記憶する単純なイベントエミッタのようです。何かご意見は ? –

+0

ミドルウェアは、非同期コードを実行してもストアとやりとりできる抜け穴として機能します。そのため、WebSocketのような永続的な接続を保持するのに理想的な場所になります。ミドルウェアが傍受するアクションをアクションにディスパッチし、websocketから受信したメッセージをReduxアクションに変換することで、websocketにメッセージを送信できます。 – markerikson

関連する問題