🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Redux

Reduxは、JavaScriptアプリケーションの状態を管理するためのオープンソースライブラリです。ReactやAngularで一般的にユーザーインターフェイスの構築に利用されます。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

1回答

1312閲覧

React + Redux でWebsocket 通信

tajihiro

総合スコア14

Redux

Reduxは、JavaScriptアプリケーションの状態を管理するためのオープンソースライブラリです。ReactやAngularで一般的にユーザーインターフェイスの構築に利用されます。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2019/12/10 01:13

編集2019/12/10 02:46

React + Redux でWebsocket 通信を実装しようとしています。
質問としては、プログラム構成の質問です。

下記は一部割愛したソースコードです。
このページ内にて、ソケット通信初期処理⇒ソケット通信開始⇒イベント送信処理⇒ソケット受信処理を実行する流れなのですが、スコープの関係上どうしてもソケット受信処理を受け取る構成が取れません。当然、Reduxの設計を活かせたらと思っています。

Javascript

1import React, { Component } from 'react'; 2import { connect } from 'react-redux'; 3import { Link } from 'react-router-dom'; 4import { Socket } from 'phoenix'; 5 6//ソケット通信初期処理 7const socket = new Socket("/socket", {params: {token: window.userToken}}); 8socket.connect(); 9const channel = socket.channel("member:lobby", {}); 10 11//ソケット受信処理 12channel.on('new_message', state => { 13 console.log("ソケットデータ受信!!!" + state.body); 14}); 15 16 17class Sample extends Component{ 18 constructor(props) { 19 super(props); 20 this.state = { 21 data: [], 22 } 23 24 this.doEnterKey = this.doEnterKey.bind(this); 25 } 26 27 componentDidMount() { 28 //ソケット通信開始 29 channel.join() 30 .receive("ok", resp => { console.log("Joined successfully", resp) }) 31 .receive("error", resp => { console.log("Unable to join", resp) }) 32 } 33 34 //イベント送信処理 35 doEnterKey(e){ 36 if(e.keyCode === 13){ 37 console.log('Enter Key!!!' + e.target.value); 38 channel.push("new_message", {body: e.target.value}); 39 } 40 } 41 42 render() { 43 return ( 44 <div> 45 <div>Websocket</div> 46 <div id="messages"></div> 47 <input id="chat-input" type="text" onKeyDown={this.doEnterKey}></input> 48 <Link to={"/"}>戻る</Link> 49 </div> 50 ); 51 } 52} 53export default connect()(Sample);

【質問事項】

  1. 画面内で使用する初期処理した socket や channel は、どこで初期化してどこで管理するのが良いでしょうか?
  2. サーバ側から受け取った Websocket は、どのように検知できるのでしょうか?

何かお気づきの点や知見等がございましたら、ご意見頂きたく願います。
以上、抽象的な質問となりますが、よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

redux-sagaを使って、middlewareからforkしたプロセス内の無限ループで実装するという方法が使えると思います。
参考:redux-sagaでwebsocketを使う

尚、上記の記事はredux-sagaが導入済みの前提で書かれているようなので、まだredux-sagaを導入していない場合はまず構築するところから進める必要があります。
Github - redux-saga

「redux-saga websocket」で検索するとサンプルが色々出てきますので、ご検討してみてください。

投稿2019/12/10 04:37

guissy-k

総合スコア245

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問