2016-03-23 12 views
7

nodejsサーバーがsocket.ioを介して反応ダッシュボードにプッシュイベントを配信するプロジェクトがあります。私はReduxを使用しています。新しいデータが受信されると、関連するすべてのコンポーネントが更新されるようにアクションがトリガーされますが、私がやっているやり方が正しいかどうかはわかりません。Reduxでコンポーネントに結び付けられていないアクションをディスパッチする正しい方法は何ですか?

これは私がサーバーから新しい受信データを監視する方法である:

socket.on('incidents', state => { 
    boundActionSetIncidentsList(state); 
    }); 

そして、これは新しいデータに呼び出された有界アクションの作成者である:

import { store } from '../index'; 

    export function boundActionSetIncidentsList(incidents) { 
    store.dispatch(actionSetIncidentsList(incidents)); 
    } 

私は店を必要としますあなたが見ることができるように、私は残酷なindex.jsからそれをインポートしていることがわかりますように、アクションを派遣する。

export const store = createStore(); 

が反応し、私はコンテナやプレゼンテーションコンポーネントからトリガされていないアクションをディスパッチするReduxの通行は何か不思議でしたReduxのために非常に新しいビーイング:これは、それが作成される方法です。ありがとうございました!!

答えて

2

ソケットリスナーを設定するコードを、ストアを引数として受け取る関数にラップすることができます。だから、少なくともあなたのクライアントのメインルーチンは、ストアをセットアップし、準備ができたらそれをソケットリスナに渡すことができます。

また、ライブラリを使用して試してみることもできます。ここでは、サーバーがデータを送信するときに自動的にストアにアクションをディスパッチすることができますいくつかのReduxのミドルウェアです:

https://github.com/itaylor/redux-socket.io

+0

本当にラッピングは実際には最も進んだ方法ですが、ミドルウェアを使用するのは確かによりエレガントですが、Brandonに感謝します。 – Slartibartfast

2

一般的な提案は店のdispatchへのアクセス権を持っているReduxのミドルウェア(のいずれかであなたのソケット接続を管理することですメソッド)、またはコンポーネントのマウント/マウント解除時にソケットを処理するReactコンポーネントで、dispatch(またはソケットイベントで使用するために事前バインドアクションクリエータ)にアクセスするためにReact-Redux connect関数を使用できます。

関連する問題