次にフェッチするデータ.SWRの使い方
次.JSはクライアントとサーバサイドの両方のレンダリングをサポートしているので、データを取得する方法はいくつかあります.一つはSWRを使用することです.そして、それはリモートデータ取得のために一連の反応フックです.
このチュートリアルでは、SWR、キャッシュ、ページ化、再検証などのようなものを簡単にするライブラリを見ていきます.また、データを取得する次のアプリJSON Placeholder SWRの使用 What is SWR? Setting up Fetching the data with Creating the components Paginating the data with 始めましょう!
SWRは
SWRはバックエンドの不可知性で、HTTPリクエストをサポートするサーバからデータを取得するために使用できます.これは、typescriptとサーバー側のレンダリングにも良いサポートしています.
つまり、私たちは手を汚すことができますし、新しい次の設定.JSアプリはSWR機能を使用します.
新しいアプリケーションを設定するには、次のアプリを作成するために行くよ.
コマンドラインインターフェイス( CLI )を開き、このコマンドを実行します.
このフォルダ構造を使用すると、次のセクションのJSONプレースホルダからリモートデータを取得できます.
SWRでリモートデータを取得するには
さあ、ファイルを調べましょう
The
次に、
このカスタムフックを使用する準備ができたら、現在取得した記事を表示するコンポーネントを作成できます.
その後、我々は
この手順を実行すると、ブラウザですべてが動作するかどうかを確認できます.そのためには、プロジェクトをCLIで開き、次のコマンドを実行します.
すごい!データをサーバから取得します
我々が以前に言ったように、SWRは簡単にデータをpaginatingすることができるもう一つのフックを提供します.我々のアプリを更新しましょう
まだ使用可能です 次に、コンポーネントを使用するために値を返します.
この手順を使用すると、このコマンドをCLIで実行することで、ページネーションが動作するかどうかをテストできます.
そして、それ!我々のアプリは良い探しています!
次はクライアント側のSWRライブラリを使用します.jsこれで完成したプロジェクトを見つけることができますCodeSandbox .
このような他の偉大なコンテンツを見つけることができますmy blog または通知を得るために私に従ってください.
読書ありがとう!
このチュートリアルでは、SWR、キャッシュ、ページ化、再検証などのようなものを簡単にするライブラリを見ていきます.また、データを取得する次のアプリJSON Placeholder SWRの使用
useSWR
useSWRInfinite
SWRとは
SWRは
stale-while-revalidate
. それは、同じチームの背後に作成された軽量ライブラリですNext.js . これは、フェッチ、キャッシュ、またはリアルタイムで反応フックのデータを再フェッチすることができます.SWRは3つのステップで進みます.まず、キャッシュを返して、サーバーからデータを取得(再検証)し、最終的に最新のデータとともに来ます.この方法では、SWRは、サーバーから新しいデータを取得しながらユーザーに何かを表示させることによって、ユーザーエクスペリエンスを向上させます.SWRはバックエンドの不可知性で、HTTPリクエストをサポートするサーバからデータを取得するために使用できます.これは、typescriptとサーバー側のレンダリングにも良いサポートしています.
つまり、私たちは手を汚すことができますし、新しい次の設定.JSアプリはSWR機能を使用します.
設定
新しいアプリケーションを設定するには、次のアプリを作成するために行くよ.
コマンドラインインターフェイス( CLI )を開き、このコマンドを実行します.
npx create-next-app next-swr-app
パッケージをインストールします npm install swr
次に、このようにフォルダを構築します.├── components
| └── Post.js
├── pages
| └── index.js
├── useRequest.js
└── package.json
ファイル構造を壊しましょうPost.js
コンポーネントはPOSTオブジェクトの表示に責任があります.index.js
我々のアプリのホームページです.useRequest.js
SWRを使用してデータを取得するのに役立つカスタムフックです.USEWRでデータを取得する
SWRでリモートデータを取得するには
useSWR
or useSWRInfinite
. しかし、フックの間には若干の違いがあります.最初のデータの取得だけで、2番目のフックは、データを取得し、取得することができます.使えますuseSWRInfinite
あなたの次に無限のスクロールまたはページを追加するには.時間がないのJSアプリ.さあ、ファイルを調べましょう
useRequest.js
:import useSWR from "swr"
const fetcher = url => fetch(url).then(res => res.json())
const baseUrl = "https://jsonplaceholder.typicode.com"
export const useGetPosts = path => {
if (!path) {
throw new Error("Path is required")
}
const url = baseUrl + path
const { data: posts, error } = useSWR(url, fetcher)
return { posts, error }
}
データを取得するためにこのカスタムフックを使用することは任意です.代わりにSWRフックを直接コンポーネントに使用できます.The
fetcher
関数はHTTPリクエストをサーバに送信し、応答データをJSONにパースします.The fetch
メソッドはunfetch
パッケージは次の発送.js次に、
useGetPosts
クエリを送信する関数useSWR
フック.引数として受け取るurl
サーバとfetcher
クエリを実行する関数です.データが取得されると、posts
とerror
状態.このカスタムフックを使用する準備ができたら、現在取得した記事を表示するコンポーネントを作成できます.
コンポーネントの作成
components/Post.js
export default function Post({ post }) {
const { title, body, id } = post
return (
<div className="Card">
<h1 className="Card--title">
{id}. {title}
</h1>
<p className="Card--body">{body}</p>
</div>
)
}
ご覧のように、シンプルなコンポーネントを受け取りますpost
パラメータとして表示するにはその後、我々は、ポストを表示するためにオブジェクトから要素を引き出すために破壊を使用します.App.js
import { useGetPosts } from "../useRequest"
import Post from "../components/Post"
export default function IndexPage() {
const { posts, error } = useGetPosts("/posts")
if (error) return <h1>Something went wrong!</h1>
if (!posts) return <h1>Loading...</h1>
return (
<div className="container">
<h1>My Posts</h1>
{posts.map(post => (
<Post post={post} key={post.id} />
))}
</div>
)
}
ここでは、我々はuseGetPosts
フックをしてリクエストを実行するための引数としてパスを渡します.It returns the posts
エラー状態を表示する.その後、我々は
Post
データの配列を表示するコンポーネント.エラーが発生した場合、error
SWRによって提供されます.この手順を実行すると、ブラウザですべてが動作するかどうかを確認できます.そのためには、プロジェクトをCLIで開き、次のコマンドを実行します.
yarn dev
またはnpm
npm run dev
ブラウザで会いましょうhttp://localhost:3000
すごい!データをサーバから取得します
useSWR
フック.我々が以前に言ったように、SWRは簡単にデータをpaginatingすることができるもう一つのフックを提供します.我々のアプリを更新しましょう
useSWRInfinite
.USSPERINFINCEによるデータのページ化
まだ使用可能です
useSWR
データをページ化するフックですが、追加のコードとSWRが既に提供されているのでuseSWRInfinite
それをする.useRequest.js
import { useSWRInfinite } from "swr"
const fetcher = url => fetch(url).then(res => res.json())
const baseUrl = "https://jsonplaceholder.typicode.com"
export const usePaginatePosts = path => {
if (!path) {
throw new Error("Path is required")
}
const url = baseUrl + path
const PAGE_LIMIT = 5
const { data, error, size, setSize } = useSWRInfinite(
index => `${url}?_page=${index + 1}&_limit=${PAGE_LIMIT}`,
fetcher
)
const posts = data ? [].concat(...data) : []
const isLoadingInitialData = !data && !error
const isLoadingMore =
isLoadingInitialData ||
(size > 0 && data && typeof data[size - 1] === "undefined")
const isEmpty = data?.[0]?.length === 0
const isReachingEnd =
isEmpty || (data && data[data.length - 1]?.length < PAGE_LIMIT)
return { posts, error, isLoadingMore, size, setSize, isReachingEnd }
}
The useSWRInfinite
フックはリクエストキーを返す関数を引数として期待しますfetcher
関数とオプション.リクエストキー(index
) SWRはどのデータを取得するかを知るために使用します.リクエストキーの初期値は0
, それで、我々はそれによって増加しなければなりません1
各リクエスト.URLで定義する2番目の引数はPAGE_LIMIT
, これはリクエストごとに取得する項目の数です.useSWRInfinite
それより多くの値を返します.私は、私がここで必要としないデータを取り除きました.これらの変数をどう説明しましょうposts
サーバから取得したデータの配列です.isLoadingInitialData
取得するデータがまだ残っているかどうかを調べます.isLoadingMore
現在データを取得しているかどうかを調べます.isEmpty
データの配列が空かどうかチェックします.isReachingEnd
ページの制限に達したかどうかを調べます.App.js
import { usePaginatePosts } from "../useRequest"
import Post from "../components/Post"
export default function IndexPage() {
const {
posts,
error,
isLoadingMore,
size,
setSize,
isReachingEnd,
} = usePaginatePosts("/posts")
if (error) return <h1>Something went wrong!</h1>
if (!posts) return <h1>Loading...</h1>
return (
<div className="container">
<h1>My Posts with useSWRInfinite</h1>
{posts.map(post => (
<Post post={post} key={post.id} />
))}
<button
disabled={isLoadingMore || isReachingEnd}
onClick={() => setSize(size + 1)}
>
{isLoadingMore
? "Loading..."
: isReachingEnd
? "No more posts"
: "Load more"}
</button>
</div>
)
}
ここでは、我々は最初のインポートusePaginatePosts
そして、引数としてAPIエンドポイントを渡します.次に、フックによって返される値を使用してポストを表示し、新しいデータを読み込みます.一度load more
ボタンをクリックすると、SWRは次のページにリクエストを送信し、データを返します.これにより、データは現在、useSWRInfinite
フック.この手順を使用すると、このコマンドをCLIで実行することで、ページネーションが動作するかどうかをテストできます.
yarn dev
ブラウザで会いましょうhttp://localhost:3000
そして、それ!我々のアプリは良い探しています!
次はクライアント側のSWRライブラリを使用します.jsこれで完成したプロジェクトを見つけることができますCodeSandbox .
このような他の偉大なコンテンツを見つけることができますmy blog または通知を得るために私に従ってください.
読書ありがとう!
Reference
この問題について(次にフェッチするデータ.SWRの使い方), 我々は、より多くの情報をここで見つけました https://dev.to/ibrahima92/data-fetching-in-next-js-how-to-use-swr-34gnテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol