質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.46%
Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

React.js

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

Q&A

0回答

910閲覧

Next.js 「Can't perform a React state update on an unmounted component」という警告が発生し、メモリリークしてしまいます。

Daimian

総合スコア53

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

React.js

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

0グッド

0クリップ

投稿2021/01/23 02:29

編集2021/01/24 17:08

Next.jsでmdファイルをpre-renderingしてhtmlに変換し、その結果を表示するシンプルなサイトを作成しています。

非常にシンプルな構成のサイトなのですが、ページ遷移や言語切り替えをローディング直後に連打すると

Warning: 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.

という警告文が表示されます。

以下のpre-rendering処理に何か問題があるのでしょうか?

pre-rendering処理(公式のドキュメントを参考に実装)

// getAllPostIds, getSortedHeadlineTitles, getPostDataはライブラリにあるメソッドで、postsディレクトリに格納されているmdファイルの内容を展開しています export async function getStaticPaths({ locales }) { const paths = getAllPostIds(locales) return { paths, fallback: false } } export async function getStaticProps({ params, locale }) { const sortedHeadlineTitles = getSortedHeadlineTitles(locale); // ids = ['04', '03', '02', '01'] const ids = [] let n = parseInt(params.id, 10); while (0 < n) { const strId = `0${n}`; ids.push(strId) n = n - 1; } const postAllData = async () => { return await Promise.all( ids.map(async (id) => { const postData = await getPostData(id, locale); return { id, contents: postData, } }) ) }; return { props: { sortedHeadlineTitles, postAllData: await postAllData(), locale, } } } export default function Post({ sortedHeadlineTitles, postAllData, locale }) { return ( <Layout sortedHeadlineTitles={sortedHeadlineTitles}> <About locale={locale} /> {postAllData.map((postData) => ( <PostData postData={postData} key={postData.id} /> ))} </Layout> ) }

警告文の通りに解釈すると、unMount時にも更新がかかってしまっているそうです。

バンドル後のdevツールで確認したコードは

function Post(_ref) { _s(); var _this = this; var sortedHeadlineTitles = _ref.sortedHeadlineTitles, postAllData = _ref.postAllData, locale = _ref.locale; 以下 割愛

となっており、この

var sortedHeadlineTitles = _ref.sortedHeadlineTitles,

が問題だとdevツールで記載されていました。

ヒントでも結構ですのでご教示いただけますと幸いです。

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

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

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

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

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

YND_teratail

2021/01/29 08:15

タグの部分が、Next.jsのはずなのに、Nuxt.jsになっていますので、編集をよろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問