Reactで開発している際、以下のようなエラーがというかWarningがでました。
このWarningがでてから、Reactの保存が遅くなりました。
これは何が原因なのでしょうか?
cosole
1Warning: Can't perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in a useEffect cleanup function. 2 in WorksDetail (created by Context.Consumer)
以下ファイルを追加した後、おかしくなりました。
一覧 → 詳細画面のページ
jsx
1import React, { useState } from 'react'; 2import { db } from '../../Firebase'; 3import PcImage from '../../assets/img/portfolio/PC.png' 4 5const WorksDetail = (props) => { 6 const [ works, setWorks ] = useState([]); 7 8 const docId = props.match.params.id; 9 const docRef = db.collection('works').doc(docId); 10 11 docRef.get().then((doc) => { 12 if (doc.exists) { 13 const docData = doc.data(); 14 setWorks(docData); 15 } else { 16 console.log('No such document!'); 17 } 18 }) 19 .catch(function(error) { 20 console.log('Error getting document:', error); 21 }); 22 23 return ( 24 <> 25 <h2>Portfolio</h2> 26 <div className="article"> 27 <h3>Work</h3> 28 <section className="work"> 29 <img src={ works.imagePath1 } className="left-work" alt={works.main} /> 30 <div className="right-work"> 31 <div className="sub-text">{works.sub}</div> 32 {works.url ? ( 33 <div className="main-text link"> 34 <img src={PcImage} alt="pc icon" /> 35 <a href={works.url} rel="noreferrer noopener" target="_blank">{works.main}</a> 36 </div> 37 ) : ( 38 <div className="main-text">{works.main}</div> 39 )} 40 <div className="description">{works.description}</div> 41 <h3>○主な読者層</h3> 42 <div className="target">{works.target}</div> 43 <h3>○主な内容</h3> 44 <div className="content">{works.content}</div> 45 </div> 46 </section> 47 </div> 48 <style>{` 49 .work { 50 display: flex; 51 justify-content: space-between; 52 } 53 .work .left-work { 54 width: 300px; 55 height: 270px; 56 object-fit: cover; 57 margin: 0 25px 0 0; 58 } 59 .work .right-work .sub-text { 60 font-size: 15px; 61 font-weight: bold; 62 } 63 .work .right-work .main-text { 64 font-size: 20px; 65 font-weight: bold; 66 margin: 0 0 15px 0; 67 } 68 .work .right-work .link a { 69 color: #1D60FE; 70 } 71 .work .right-work .link img { 72 margin: 0 10px 0 0; 73 top: 3px; 74 position: relative; 75 } 76 .work .right-work .description, 77 .work .right-work .target, 78 .work .right-work .content { 79 text-align: justify; 80 font-size: 14px; 81 line-height: 1.5; 82 margin: 0 0 20px 0; 83 } 84 .work .right-work h3 { 85 margin: 0; 86 } 87 `}</style> 88 </> 89 ); 90} 91 92export default WorksDetail;
コードまでは見てませんが、めちゃくちゃ丁寧なエラーメッセージが出ていて、原因や修正するためのヒントまで書いてありますね。
それを読んで具体的に何がわからなかったのかを質問文に書かれてはどうでしょうか。
警告:マウント解除されたコンポーネントでReact状態の更新を実行できません。 これは何もしませんが、アプリケーションのメモリリークを示しています。 修正するには、useEffectクリーンアップ関数ですべてのサブスクリプションと非同期タスクをキャンセルします。
WorksDetail(Context.Consumerにより作成)
Google翻訳で翻訳してみましたが「useEffectクリーンアップ関数ですべてのサブスクリプションと非同期タスクをキャンセルします。」の意味がさっぱりわかりません。
回答1件
あなたの回答
tips
プレビュー