質問編集履歴
1
コメントの追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -411,3 +411,91 @@
|
|
411
411
|
|
412
412
|
|
413
413
|
ご回答お待ちしております。
|
414
|
+
|
415
|
+
|
416
|
+
|
417
|
+
## 追記
|
418
|
+
|
419
|
+
useEffect内にてリスナーのデタッチのためのunsbscribeをreturnしていますが、ご指摘いただいた通り、returnを消して`unsubscribe()`だけに変更したらレンダリングが抑えられる様になりました。
|
420
|
+
|
421
|
+
|
422
|
+
|
423
|
+
しかしながら、時間が経って再びconsoleに出力すると、直す前と変わらず無限にレンダリングがされてしまっていました。その上で、リアルタイムのコメントの反映もされなくなってしまったので、`onSnapshot((snapshots) => {})`の外に`return unsubscribe;`とすることで、リアルタイムのコメントの反映の部分は直ったのですが、依然として無限にレンダリングされる現象が直りません。
|
424
|
+
|
425
|
+
|
426
|
+
|
427
|
+
```CommentForm.tsx
|
428
|
+
|
429
|
+
useEffect(() => {
|
430
|
+
|
431
|
+
let comments: any = [];
|
432
|
+
|
433
|
+
const unsubscribe: any = db
|
434
|
+
|
435
|
+
.collection("posts")
|
436
|
+
|
437
|
+
.doc(id)
|
438
|
+
|
439
|
+
.collection("comments")
|
440
|
+
|
441
|
+
.orderBy("createdAt", "desc")
|
442
|
+
|
443
|
+
.onSnapshot((snapshots) => {
|
444
|
+
|
445
|
+
snapshots.docChanges().forEach((change) => {
|
446
|
+
|
447
|
+
const data = change.doc.data({ serverTimestamps: "estimate" });
|
448
|
+
|
449
|
+
const changeType = change.type;
|
450
|
+
|
451
|
+
|
452
|
+
|
453
|
+
switch (changeType) {
|
454
|
+
|
455
|
+
case "added":
|
456
|
+
|
457
|
+
comments.push(data);
|
458
|
+
|
459
|
+
break;
|
460
|
+
|
461
|
+
case "modified":
|
462
|
+
|
463
|
+
const index = comments.findIndex(
|
464
|
+
|
465
|
+
(comment: any) => comment.id === change.doc.id
|
466
|
+
|
467
|
+
);
|
468
|
+
|
469
|
+
comments[index] = comment;
|
470
|
+
|
471
|
+
break;
|
472
|
+
|
473
|
+
case "removed":
|
474
|
+
|
475
|
+
comments = comments.filter(
|
476
|
+
|
477
|
+
(comment: any) => comment.id !== change.doc.id
|
478
|
+
|
479
|
+
);
|
480
|
+
|
481
|
+
break;
|
482
|
+
|
483
|
+
default:
|
484
|
+
|
485
|
+
break;
|
486
|
+
|
487
|
+
}
|
488
|
+
|
489
|
+
});
|
490
|
+
|
491
|
+
setComment(comments);
|
492
|
+
|
493
|
+
});
|
494
|
+
|
495
|
+
return unsubscribe; //変更箇所
|
496
|
+
|
497
|
+
}, []);
|
498
|
+
|
499
|
+
|
500
|
+
|
501
|
+
```
|