teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

試したことの追加

2020/02/12 06:40

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -293,4 +293,39 @@
293
293
  }
294
294
  }
295
295
 
296
- ```
296
+ ```
297
+ # 追記
298
+ 下記の様に副作用(useEffect)のスキップ(isChangedで制御)を外したところ正常に動作いたしました。
299
+ しかし、今度はリクエストが永遠に送られつづけ、```429 Too many requests```で死にます。
300
+ このことより、pusherとのデータのやりとりをする為のコードは間違っていないことがわかりました。
301
+ 恐らく、useEffectが何度も走るということは、何度もレンダリング?されているからだと思うのですが、その原因がわかりません…。
302
+
303
+ ```
304
+   useEffect(() => {
305
+
306
+ // Pusher用のキーを設定
307
+ const pusher = new Pusher(process.env.MIX_PUSHER_APP_KEY, {
308
+ cluster: process.env.MIX_PUSHER_APP_CLUSTER,
309
+ encrypted: true
310
+ })
311
+ // チャンネルの購読
312
+ const channel = pusher.subscribe('chat')
313
+ channel.bind('ChatMessageReceived', data => {
314
+ console.log(data)
315
+ setMessages([...messages, data])
316
+ console.log(messages)
317
+ })
318
+
319
+ const token = JSON.parse(User.get('token')).token
320
+ const boardID = Board.getBoardID()
321
+
322
+ if (token) {
323
+ Chat.get(token, boardID)
324
+ .then(res => {
325
+ setMessages(res.data.messages)
326
+ })
327
+ .catch(e => {
328
+ console.log(e)
329
+ })
330
+ }
331
+ })