2016-03-20 17 views
2

私はReactを初めて使用しています。コンポーネント構造とwebsocketを共有する際にいくつか問題があります。Reactjs:コンポーネント間でwebsocketを共有する方法

アプリはカテゴリと商品で構成されています。初期データのロードはAjaxリクエストで行われ、websocketはデータの更新を維持するために使用されます。

マイコンポーネント階層は次のようになります。

  • CategoriesList
    • カテゴリー
      • ProductsList
        • 製品

CategoriesListはカテゴリの状態を保持し、ProductsListは、カテゴリ内の製品の状態を保持しています。

私はCategoriesListとProductsListの中で同じwebsocketを使用したいと思いますが、websocketの別のイベントを聴いています:category:updatedとproduct:updated。

どのようにコンポーネント間でwebsocketを共有し、どこで初期化するのが適切ですか?

カテゴリごとに1つのProductsListがあるため、製品:更新されたイベントが複数回(各カテゴリに1つずつ)発生しますか?私はこれがパフォーマンス面では良いことではないと思います。

+0

私はリアクションがあなたの実装をどのくらい気にしているかを説明するつもりですhttps://twitter.com/AdamRackis/status/707004963776430080コンポーネントが変更をリッスンできるようにするソケット接続インスタンスを(context?maybe?経由で)渡します。あなたが快適であれば何でも自由に使用してください。リアクションはあなたを制限しません。 – Andreyco

+0

はい、小道具を通すことで共有したり、Fluxのようなアーキテクチャを使用してください。ソケットはどこからでもアクセスできる店舗にあります。 'componentDidMount'のイベントを聞き、' componentWillUnmount'のイベントのためにunlistenします。 Socket.IOなどのWebソケットライブラリを使用していますか? – Aaron

+0

@Aaron私はプッシャーが提供するライブラリを使用しています。com – Fernando

答えて

4

CategoriesListでソケット接続を初期化し、その接続を子コンポーネントにpropsとして渡すことをお勧めします。接続が拒否されると、子コンポーネントで必要に応じて特定のイベントをリッスンすることができます。

ここでは、reactとsocket.ioを使用するgithubのアプリケーション例を示します。ソケットは親コンポーネントで初期化され、その後に渡されます。 https://github.com/raineroviir/react-redux-socketio-chat/blob/master/src/common/containers/ChatContainer.js

9行目で接続が初期化され、23行目では小道具として渡されます。この接続は、子コンポーネントで後でイベントを受信して​​送信するために使用されます。例:https://github.com/raineroviir/react-redux-socketio-chat/blob/master/src/common/components/Chat.js

-1

react-cent 独自のプロバイダ(CentProvider.js)を記述してコンポーネントをラップし、クライアントからコンテキストを提供することができます。さらに、Higher-Order Component(CentComponent.js)を書いて、それを利用できるようにしてください。this.props.<client>

+0

この質問に対する回答は、常に存在するとは限らないサードパーティのパッケージへのリンクに大きく依存しています。将来、OP内の質問に固有の情報をテキスト内に含めることで回答してください – kwishnu

関連する問題