想定している処理の流れ
Next.jsでgetStaticPropsとgetStaticPathsを使って
firebaseからデータのidを取得し、
そのidをpathにして動的ルーティングを実装したいです。
pages配下の[id].tsxというファイル内で
getStaticPathsでfirebaseのデータのidを取得し、
それをparamsに入れて動的にページを生成しようとしています。
getStaticPaths関数の中で、console.log(paths)を実行して
pathsが取得できているかを確認してみるとターミナル上で以下が表示されました。
[
{ params: { id: ‘20fkyQOE2D9Tc2RVPbwz’ } },
{ params: { id: ‘Ec6Ioq8C8V7DjImLXNgk’ } },
{ params: { id: ‘UF14bGDDylhGQkASQX7K’ } },
{ params: { id: ‘h8D7JBAFHcRgaZMZ2SR5’ } }
]
firebaseからデータのidを取得すること自体はできているのかなと思っているのですが、
取得したidをURLにして叩いてみても404ページが表示される状況です。
[id].tsxのディレクトリ
/pages/[id].tesx
[id].tsxの記述内容
typescript
1import head from "next/head"; 2import React from "react"; 3import firebase from "firebase"; 4import { db } from "../firebase"; 5import { GetStaticPaths, GetStaticProps} from "next"; 6import Link from "next/link"; 7 8export const getStaticPaths = async () => { 9 const tasksSnapshot = await db.collection('tasks').get().then((snapshot) => { 10 const paths = snapshot.docs.map(doc => { 11 return { 12 params: { id: doc.id.toString() }, 13 }; 14 }); 15 console.log(paths) 16 return { paths,fallback: false }; 17})}; 18 19 export const getStaticProps= async () => { 20 const tasks = []; 21 const ref = await db.collection('tasks').get(); 22 ref.docs.map((doc) => { 23 const data = { id: doc.id, title: doc.data().title }; 24 tasks.push(data); 25 }); 26 return { 27 props: { 28 tasks, 29 } 30 } 31 } 32 33 const Details = ({ tasks }) => { 34 return ( 35 <> 36 <h1>Firebaseのページ</h1> 37 <ul> 38 {tasks.map((task) => ( 39 <li key={task.id}>{task.title}</li> 40 ))} 41 </ul> 42 <Link href={`/`}> 43 <a>戻る</a> 44 </Link> 45 </> 46 ); 47 } 48
問題点/エラー内容/エラー文章
Terminal
1Error: Invalid value returned from getStaticPaths in /[id]. Received undefined Expected: { paths: [], fallback: boolean }See here for more info: https://nextjs.org/docs/messages/invalid-getstaticpaths-value 2
firebaseに存在するデータのidをURLにしてアクセスすると、404ページが表示される状態になっています。
エラー原因となり得る部分
「Received undefined Expected」というエラー文から
undefinedの要素があるのか考えているのですが、
まだ何が間違っているのかの判断がついていません。
試したことや調べたこと
以下のページを参照してみたのですが、何が間違えているのか理解ができませんでした。
https://nextjs.org/docs/messages/invalid-getstaticpaths-value
おわかりになる方がいらっしゃったら、教えていただけますと幸いです。
なにとぞよろしくお願いいたします。
あなたの回答
tips
プレビュー