質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.40%
Next.js

Next.jsは、Reactを用いたサーバサイドレンダリングなどを行う軽量なフレームワークです。Zeit社が開発しており、nextコマンドでプロジェクトを作成することにより、開発環境整備が整った環境が即時に作成できます。

MicroCMS

MicroCMSとは、APIベースのヘッドレスCMSです。日本製のため、デフォルトで日本語に対応しており、サポートも豊富。管理画面でも作成したコンテンツなどが見やすくシンプルで、APIの管理がしやすい点も特徴です。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

3231閲覧

(React.js)mapがundefinedになります

cawauchi

総合スコア4

Next.js

Next.jsは、Reactを用いたサーバサイドレンダリングなどを行う軽量なフレームワークです。Zeit社が開発しており、nextコマンドでプロジェクトを作成することにより、開発環境整備が整った環境が即時に作成できます。

MicroCMS

MicroCMSとは、APIベースのヘッドレスCMSです。日本製のため、デフォルトで日本語に対応しており、サポートも豊富。管理画面でも作成したコンテンツなどが見やすくシンプルで、APIの管理がしやすい点も特徴です。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2020/09/20 07:45

現在JAMstackなブログを作るために
Next.js + microCMS + NetlifyでJAMstackな世界に入門する
上記の記事を参考にしながら進めています。

micro cmsを使い、fetchで記事をとって記事データなどを集めてきています。

ここでご質問なのですが、
buildをする際に、

> Build error occurred TypeError: Cannot read property 'map' of undefined at getStaticPaths (/Users/cawauchi/Desktop/blog/.next/server/pages/blogs/[id].js:156:32) at processTicksAndRejections (internal/process/task_queues.js:93:5) at async buildStaticPaths (/Users/cawauchi/Desktop/blog/node_modules/next/dist/build/utils.js:17:80) at async Object.isPageStatic (/Users/cawauchi/Desktop/blog/node_modules/next/dist/build/utils.js:24:549) { type: 'TypeError' }

といったエラーが起きてしまいます。

ちなみにnpm run devの場合だとエラーが起きず、意図したページが表示されます。

at getStaticPaths (/Users/cawauchi/Desktop/blog/.next/server/pages/blogs/[id].js:156:32)

とあるので

pages/[id].js

1import React from 'react' 2import fetch from 'isomorphic-unfetch'; 3 4const BlogId = ({ blog }) => { 5 return ( 6 <div> 7 <h1>{blog.title}</h1> 8 <div> 9 {blog.tags.map(tag => ( 10 <React.Fragment key={tag.id}> 11 <span>{tag.name}</span> 12 </React.Fragment> 13 ))} 14 </div> 15 <div dangerouslySetInnerHTML={{ __html: `${blog.body}` }}></div> 16 </div> 17 ); 18}; 19 20// パスを生み出している 21export const getStaticPaths = async () => { 22 const key = { 23 headers: { 'X-API-KEY': process.env.API_KEY }, 24 }; 25 26 const res = await fetch('エンドポイント', key); 27 const repos = await res.json(); 28 //ここでログ出してます 29 console.log(repos) 30 31 // 配列で/blogs/idを返す 32 const paths = repos.contents.map(repo => `/blogs/${repo.id}`); 33 return { paths, fallback: false }; 34}; 35 36// 内容を返す 37export const getStaticProps = async context => { 38 const id = context.params.id; 39 40 const key = { 41 headers: { 'X-API-KEY': process.env.API_KEY }, 42 }; 43 44 const res = await fetch( 45 `エンドポイント/${id}`, 46 key, 47 ); 48 const blog = await res.json(); 49 50 return { 51 props: { 52 blog: blog 53 } 54 }; 55}; 56 57export default BlogId; 58
const paths = repos.contents.map(repo => `/blogs/${repo.id}`);

この部分でundefinedを出していたと推測したので
console.log(repos)
を挟んでみたところ

{ contents: [ { id: 'zoskqppsn', createdAt: '2020-09-20T03:30:11.976Z', updatedAt: '2020-09-20T06:43:59.289Z', publishedAt: '2020-09-20T03:30:11.976Z', title: 'This is test', body: '<p><span style="font-size: 2.5em">これはテストです</span><br>これはテストテストテストテスト<br></p>', tags: [Array] } ], totalCount: 1, offset: 0, limit: 10 }

以下のようなオブジェクトが返されたので

const paths = repos.contents.map(repo => `/blogs/${repo.id}`);

こちらのrepos.contentsは配列であり、mapではundefinedにはならないと思うのですが解決方法がわからず詰まってしまっております。

アドバイスをいただけたらと思います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

もしかすると、環境変数を.env.development.localに書いていませんか?
そうであれば、.env.localに書いて試してみてください。

投稿2020/09/20 10:10

nskhei

総合スコア704

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cawauchi

2020/09/20 13:12

nskheiさん 神とお呼びしてもよろしいですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.40%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問