次の静的レンダリングでデータを取得する方法.js
私の最初のポストへの歓迎方法?シリーズこの記事では、次の取得にステップバイステップのチュートリアルを示すつもりです.あなたのフェッチされた内容をAstatically generated ページ.これを行うには、後のセクションでカバーされるgetstaticprops ()関数を使用します.
チュートリアルの最後に、ページが次のようになります.
完了したプロジェクトにアクセスできますhere.
必要条件 WPGraphqlプラグインを使用したWordPressインスタンス. これらの例ではheadless CMS コンテンツを管理するコンテンツ管理システムWPGraphQL データを取得するAPI.あなたがゼロからWordPress CMSを構成する方法について学ぶことに興味があるならば、私はあなたがロブKendalのものを次のヘッドレスCMSとして構成するのをチェックアウトすることを提案します.JS記事.この運動のために、あなたの選択の任意のヘッドレスCMSからコンテンツを取得するには無料です.
ステップ1 :次の作成.JSプロジェクト
我々は、使用して新しいプロジェクトを作成することから始めましょうproject create tool 次は.js端末を開き、次のコマンドを実行します.
この手順は、VSコードユーザーのオプションです.以下のコマンドを実行すると、プロジェクトフォルダが自動的にVSコードで開きます.
ステップ2 :ファイルを削除する
次のようなコードエディターでプロジェクトを開きます./ページ/API /ページ あるいは、VSコードの統合端末はファイル操作を管理するのにとても便利です.VSコードに移動する
ステップ3 :ファイルを追加する 追加 追加 追加 ステップ4 :ローカル環境の保存
私たちは
変更後に開発サーバーを再起動してください
ステップ5 :データを取得する
私たちは、WPNAME APIRANT URL変数をカバーしたので、データを取得するための関数を書き始めることができます.移動する
次に、この関数を追加することで、Graphqlにコンテンツを取得するように頼むべきです.
今、我々はいくつかの変更を実行します
次.JSは1つの非常に重要な概念を持っています:プレレンダリング.
つまり、クライアント側でJavaScriptを実行して、次のようにHTMLを生成する代わりに、次のようにします.JSは事前にHTMLを生成し、生成された各ページをクライアント側に送信します.すべてのページは、ブラウザで読み込まれた後、ページを対話的にするために実行されるJavaScriptコードに関連付けられています.これは水和と呼ばれるプロセスです.あなたはどのように動作するかを確認する簡単な実験を行うことができます:あなたのブラウザでJavaScriptをオフにし、次を実行します.JSプロジェクト、魔法を参照してください.HTMLはまだあなたのブラウザでレンダリングされますが、JavaScriptがオンになるまでは対話的ではありません.
静的生成は、ビルド時にHTMLを生成するプリレンダリングの方法の一つです.GetStaticProps ()関数を使用して、データ依存関係のある静的ページを生成します.私たちは、次に尋ねました.jsはasyngetgetstaticprops ()関数でデータを取得します.では、次に.jsは、生成されたデータの小道具をホームコンポーネントのパラメータに渡す静的に生成されたHTMLを生成し、クライアント側に送信しました.それだ!次.jsはHTMLがレンダリングされる前にデータが取り出されることを確認します.
画像は次の公式から取られます.JSウェブサイト
重要な注意
以下のファイルにgetstaticprops ()関数を使用してください
最後に
オープン
この記事を参考にしてください.お読みありがとうございます.
チュートリアルの最後に、ページが次のようになります.
完了したプロジェクトにアクセスできますhere.
必要条件
ステップ1 :次の作成.JSプロジェクト
我々は、使用して新しいプロジェクトを作成することから始めましょうproject create tool 次は.js端末を開き、次のコマンドを実行します.
npx create-next-app nextjs-blog
次に、このコマンドを実行します.cd nextjs-blog
cd
“変更ディレクトリ”のため、私たちは単に私たちが作成したプロジェクトフォルダに現在のディレクトリを変更しています.この手順は、VSコードユーザーのオプションです.以下のコマンドを実行すると、プロジェクトフォルダが自動的にVSコードで開きます.
code .
開発サーバーでプロジェクトを実行するには、次のコマンドを実行します.npm run dev
今すぐあなたのページはポート3000で実行されます.以下のようになります.ステップ2 :ファイルを削除する
次のようなコードエディターでプロジェクトを開きます.
View > Terminal
あなたの端末を開くメニューコマンド.プロジェクトのルートで直接起動する必要はありません.次に、このコマンドを入力します.rm -r pages/api
今のフォルダ構造は次のようになります.ステップ3 :ファイルを追加する
/lib
プロジェクトのルートのフォルダ./lib/api.js
ファイル./.env.local
プロジェクトのルートでファイルします.私たちは
/.env.local
アプリケーション環境定数を管理するファイルです.これらの定数は一般にURL、APIエンドポイント、APIキーから成ります.この場合、ローカル環境ファイルにURLを保存します.イン/.env.local
, あなたのWordPressインスタンスのユニークなドメイン名をGraphSQL End Pointと入力します.WP_API_URL=http://www.your-custom-website.com/graphql
重要な注意変更後に開発サーバーを再起動してください
/.env.local
ファイル.ステップ5 :データを取得する
私たちは、WPNAME APIRANT URL変数をカバーしたので、データを取得するための関数を書き始めることができます.移動する
/lib/api.js
この行を追加します.const API_URL = process.env.WP_API_URL;
async function fetchAPI(query, { variables } = {}) {
const headers = { 'Content-Type': 'application/json' };
const res = await fetch(API_URL, {
method: 'POST',
headers,
body: JSON.stringify({ query, variables }),
});
const json = await res.json();
if (json.errors) {
console.log(json.errors);
console.log('error details', query, variables);
throw new Error('Failed to fetch API');
}
return json.data;
}
この関数を使ってブログの内容をGraphSQLクエリパラメータで取得します.この関数は、異なるフェッチリクエストを通じて利用できる再利用可能な構造体として考慮することができます.次に、この関数を追加することで、Graphqlにコンテンツを取得するように頼むべきです.
export async function getRecentPosts() {
const data = await fetchAPI(`query getRecentPosts {
posts(where: {orderby: {field: DATE, order: DESC}}, first: 6) {
edges {
node {
id
title
slug
featuredImage {
node {
altText
mediaItemUrl
}
}
}
}
}
}
`);
return data?.posts;
}
ステップ6 :インデックスファイルの変更今、我々はいくつかの変更を実行します
pages/index.js
, どのエントリページですか.すべてを取り除く<main></main>
以下のコードをペーストする前に<footer></footer>
. <section>
<div className={styles.articlesContainer}>
<h1 className={styles.articleTitle}>latest articles</h1>
<div className={styles.articleGrid}>
{edges.map(({ node }) => (
<div className={styles.article} key={node.id}>
<img
src={node.featuredImage.node?.mediaItemUrl}
alt={node.featuredImage.node?.altText}
className={styles.articleThumb}
/>
<h2 className={styles.articleContent}>{node.title}</h2>
</div>
))}
</div>
</div>
</section>
私たちはページの上部にフェッチ機能をインポートします.import { getRecentPosts } from '../lib/api';
このパラメータをHome
機能部品.{ recentPosts: { edges } }
このようにHome
コンポーネントは現在のようになります.パラメータは次のセクションでカバーされます.import Head from 'next/head';
import styles from '../styles/Home.module.css';
import { getRecentPosts } from '../lib/api';
export default function Home({ recentPosts: { edges } }) {
return (
<div>
<Head>
<title>Create Next App</title>
<meta name="description" content="Generated by create next app" />
<link rel="icon" href="/favicon.ico" />
</Head>
<main>
<section>
<div className={styles.articlesContainer}>
<h1 className={styles.articleTitle}>latest articles</h1>
<div className={styles.articleGrid}>
{edges.map(({ node }) => (
<div className={styles.article} key={node.id}>
<img
src={node.featuredImage.node?.mediaItemUrl}
alt={node.featuredImage.node?.altText}
className={styles.articleThumb}
/>
<h2 className={styles.articleContent}>{node.title}</h2>
</div>
))}
</div>
</div>
</section>
</main>
</div>
);
}
今は、次を追加する時間です.下のJS機能/pages/index.js
:export async function getStaticProps() {
const recentPosts = await getRecentPosts();
return {
props: {
recentPosts,
},
};
}
getstaticProps ()関数はどのような役割を果たしますか?次.JSは1つの非常に重要な概念を持っています:プレレンダリング.
つまり、クライアント側でJavaScriptを実行して、次のようにHTMLを生成する代わりに、次のようにします.JSは事前にHTMLを生成し、生成された各ページをクライアント側に送信します.すべてのページは、ブラウザで読み込まれた後、ページを対話的にするために実行されるJavaScriptコードに関連付けられています.これは水和と呼ばれるプロセスです.あなたはどのように動作するかを確認する簡単な実験を行うことができます:あなたのブラウザでJavaScriptをオフにし、次を実行します.JSプロジェクト、魔法を参照してください.HTMLはまだあなたのブラウザでレンダリングされますが、JavaScriptがオンになるまでは対話的ではありません.
静的生成は、ビルド時にHTMLを生成するプリレンダリングの方法の一つです.GetStaticProps ()関数を使用して、データ依存関係のある静的ページを生成します.私たちは、次に尋ねました.jsはasyngetgetstaticprops ()関数でデータを取得します.では、次に.jsは、生成されたデータの小道具をホームコンポーネントのパラメータに渡す静的に生成されたHTMLを生成し、クライアント側に送信しました.それだ!次.jsはHTMLがレンダリングされる前にデータが取り出されることを確認します.
画像は次の公式から取られます.JSウェブサイト
重要な注意
以下のファイルにgetstaticprops ()関数を使用してください
/pages
フォルダは、ページ内でのみ動作します.最後に
/pages/index.js
ページは次のようになります.import Head from 'next/head';
import styles from '../styles/Home.module.css';
import { getRecentPosts } from '../lib/api';
export default function Home({ recentPosts: { edges } }) {
return (
<div>
<Head>
<title>Create Next App</title>
<meta name="description" content="Generated by create next app" />
<link rel="icon" href="/favicon.ico" />
</Head>
<main>
<section>
<div className={styles.articlesContainer}>
<h1 className={styles.articleTitle}>latest articles</h1>
<div className={styles.articleGrid}>
{edges.map(({ node }) => (
<div className={styles.article} key={node.id}>
<img
src={node.featuredImage.node?.mediaItemUrl}
alt={node.featuredImage.node?.altText}
className={styles.articleThumb}
/>
<h2 className={styles.articleContent}>{node.title}</h2>
</div>
))}
</div>
</div>
</section>
</main>
</div>
);
}
export async function getStaticProps() {
const recentPosts = await getRecentPosts();
return {
props: {
recentPosts,
},
};
}
ステップ7 :スタイルファイルの変更オープン
/styles/globals.css
, すべてのコンテンツを削除し、ペーストします.*,
*::after,
*::before {
margin: 0;
padding: 0;
box-sizing: inherit;
}
html {
font-size: 62.5%; /* 1 rem = 10px; 10px/16px = 62.5% */
}
body {
font-size: 2.5rem;
box-sizing: border-box;
line-height: 1.5;
}
次に、/styles/Home.module.css
, すべてのコンテンツを削除し、ペーストします..articleTitle {
font-size: 3rem;
text-transform: uppercase;
text-align: center;
letter-spacing: 0.12em;
}
.articleContent {
font-size: 2.5rem;
padding: 0 6.5rem;
text-align: center;
font-weight: 400;
}
.articlesContainer {
padding: 6.5rem 4rem;
}
.articleGrid {
margin-top: 6.5rem;
display: grid;
grid-template-columns: repeat(3, 1fr);
row-gap: 6.5rem;
column-gap: 3rem;
}
.articleThumb {
width: 100%;
height: 28rem;
margin-bottom: 3rem;
}
そして完了!外部データ依存関係を持つ静的ページを生成しました.この記事を参考にしてください.お読みありがとうございます.
Reference
この問題について(次の静的レンダリングでデータを取得する方法.js), 我々は、より多くの情報をここで見つけました https://dev.to/dantonelli/how-to-fetch-data-with-static-rendering-in-next-js-bdlテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol