やっとこさワード検索実装します。
ワード検索のロジック
microCMSにはデータ取得時にqパラメータでワードを渡してやると勝手に検索してくれる機能があるので、それを利用します。
そのqパラメータはURLからクエリパラメータで取得することにするので、実質一覧ページにクエリパラメータを受け取るロジックを実装すれば、作業はほぼ終わり。
app直下のpage.jsxを以下のように記述する。
import Link from "next/link"; import { getList } from "../lib/microcms"; import Header from "./component/Header"; import ArticleList from "./component/ArticleList"; import CategoryLinks from "./component/CategoryLinks"; import WordSearch from "./component/WordSearch"; export default async function StaticPage({searchParams}) { const { contents } = await getList(searchParams); return ( <> <main> <ArticleList contents={contents} /> <CategoryLinks /> </main> </> ); }
lib/microcms.jsの一覧取得ロジックを確認。
// ブログ一覧を取得 export const getList = async (queries) => { const listData = await client.getList({ endpoint: "blogs", queries, }); // データの取得が目視しやすいよう明示的に遅延効果を追加 await new Promise((resolve) => setTimeout(resolve, 3000)); return listData; };
queriesが設定されて居ればOK。
試しに「/?q={検索ワード}」にアクセスし、設定したワードが出力される記事やタイトルにちゃんと含まれているのか確認。
ワード検索の画面を作成
例の如くコンポーネントを作成。componentフォルダにWordSearch.jsxを作成し、以下のように記述。
export default function StaticPage() { return ( <div> <h2>ワード検索</h2> <form action="/" method="get"> <input type="text" name="q"/> <button>検索</button> </form> </div> ); }
ワードを入力して検索ボタンをクリックすると検索した結果が一覧ページに表示されるはず。