2016-08-28 9 views
1

私のReactコンポーネントがsocket.ioからのイベントを聞きたい。私は、HTMLファイルが含まれている場合は私のコードは動作します:socket.ioを聞くためにReactコンポーネントを設定する

<script src="socket.io/socket.io.js"></script>

して、コンポーネントのコンストラクタ()を持っている:

this.socket = io(); // eslint-disable-line no-undef

HTMLファイルがから適切socket.ioクライアントコードを取得私のExpressサーバ、そしてすべてがうまくいきます。

しかし、これはとても安っぽい感じです。私はio()関数を見つけるためにグローバルなウィンドウ名空間に頼ることは嫌いです。 Reactコンポーネントがsocket.ioを介してサーバーに接続させるためのベストプラクティスは何ですか?ありがとう。

+0

はあなたが小道具で 'io'関数を渡すことができませんか?そして、 'componentDidMount'の間に接続してください。 – rossipedia

+0

これは、あなたが制御する模擬関数を渡すことができるので、テストするのに役立ちます。 – rossipedia

答えて

3

WebpackやBrowserifyのようなバンドルを使用している場合は、socket.io-clientを使用できます。例えば

const io = require('socket.io-client'); 

class MyComponent extends React.Component { 
    constructor(...args) { 
    super(...args); 
    this.socket = io(); 
    } 
    ... 
} 
+2

はい、これは素晴らしいです!ライフサイクルメソッド( 'componentWillMount')を使う@martriayの提案は、ソケットが接続/切断されるタイミングをより細かく制御できるようにします。ありがとう! –

2

目的のイベントコールバックでcomponentWillMountsetStateにソケットを作成します。

関連する問題