Next.JSフレームワークを初めて使用し、コンポーネントページからデータをインポートするロジックを完全には理解していません。たとえば、componentsフォルダーにexample.jsのようなページを作成しました。ここでは、データをグラフにプルするAPIを実行しています。次に、グラフを表示したいindex.jsファイル内で、example.js内でAPI関数がトリガーされていないため、「未処理のランタイムエラー」が発生します。
これは私が/pages/index.jsのページをインポートする方法です:
import dynamic from 'next/dynamic'
const Example = dynamic(() => import('../pages/example.js'))
//Later on inside of my return
<Example />
そして、example.jsページから次のようにエクスポートしています。
function Example(props) {
return <div>
... my code
}
その下に、example.js内に次のものがあります。
export default Example
getStaticProps関数が続きます:
export async function getStaticProps() {
const res = await fetch("")
const data = await res.json()
if (!data) {
return {
notFound: true
}
}
return {
props: {
data: data.reverse(),
},
}
}
index.jsでこの正確なコードを使用すると、正しく機能します。これが実行されない理由に関するアイデア、および修正に関する解決策はありますか?
わかりやすくするために編集: getStaticProps関数はexample.jsファイルにありますが、問題はトリガーされないことです。
Next.jsは、サーバー側のレンダリング、静的サイトの生成、コード分割を処理するために多くの魔法を実行し、すべてを/pages
フォルダー内から実行します。/pages
フォルダ内のコンポーネントは、通常のReactコンポーネントとは少し異なる動作をすることを知っておくことが重要です。ここにあなたの問題を解決するべきあなたのためのいくつかの秘訣があります。
/pages
フォルダー内に配置します。このフォルダー内のコンポーネントは、名前付きエクスポート(のような追加のNext.js固有の関数getStaticProps
)とともに、デフォルトのエクスポート(コンポーネント)を持つことができます。Next.jsは、エクスポートされた関数を見つけると、それらを実行します。
next/dynamic
動的インポートにのみ使用します。動的インポートは遅延読み込みされます。これは、Next.jsの自動コード分割と、場合によってはサーバー側のレンダリングに影響します。正確な内部動作はわかりませんが、私の推測では、Pageコンポーネント(Nextで特別なもの)を動的にロードすることが、おそらく問題を引き起こしています。SSRを壊すサードパーティコンポーネントがある場合にのみ動的インポートを使用する傾向があるため、サーバー側でレンダリングされないように動的にインポートする必要があります。
これを処理する最も簡単な方法はおそらく次のとおりです。
で/pages/index.js
:
import Example from '../path/to/example';
export default (props) => (
<div>
<p>My page component</p>
<Example />
</div>
);
export async function getStaticProps() {
return {
props: {
data: // ...
}
};
}
上記のこのソリューションでは、動的インポートも使用できます。重要なのは、Next.js固有の関数をファイルから/pages
すぐにエクスポートすることです。
で/pages/index.js
:
import dynamic from 'next/dynamic';
const Example = dynamic(() => import('../components/example'));
export default (props) => (
<div>
<p>My page component</p>
<Example />
</div>
);
export async function getStaticProps() {
return {
props: {
data: // ...
}
};
}
Next.jsはgetStaticProps
、/pages
ディレクトリ内のファイルからエクスポートされた関数のみを呼び出します。getStaticProps
別のディレクトリからメソッドを定義する場合は、それを行うことができますが、次のようにメソッドをインポートして/pages
から再エクスポートする必要があります。
で/components/example.js
:
export default () => (
// ... component ...
);
export function getStaticProps() {
// ... function ...
};
とで/pages/index.js
:
import Example, { getStaticProps } from '../components/example';
export default Example;
export {
getStaticProps
}
これはうまくいくはずです。ただし、この場合、動的インポートを使用してExampleをインポートすることはできません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加