現在GatsbyとContentfulでブログアプリを作っているのですが、配列の仕方がわからず、どなたかご教示いただけると嬉しいです。
アプリは複数の関連タグをつけられるブログのようなもので(コード下部にgraphqlのクエリがあります)、
下記はindex.jsのソースコードで、<span className="post-basic-tagname">#タグ1</span>
の部分に記事のタグを表示したいと思っています。
ただ記事には複数のTagが付与されるため、配列で渡ってきているはずのtags
をループ処理して表示する方法がわかりません。
mapも試してみましたがうまくいきません。
#タグ1
の部分に{post.tags}
と書いてみると、
Error: Objects are not valid as a React child (found: object with keys {name, slug}). If you meant to render a collection of children, use an array instead.
というエラーが出るので、配列ではあるようなのですが、これをblogPosts.map(({ node: post }) => (
の中で、さらにループ処理?してうまく表示する方法がわかりません・・・。
const IndexPage = ({ data }) => { const blogPosts = data.allContentfulBlogArticle.edges; return ( <Layout> <div className="post-basic"> { blogPosts.map(({ node: post }) => ( <div className="post-basic-item"> <img src={post.thumbnail.file.url} alt="Slide1" className="thumbnail" /> <div className="post-basic-textblock"> <p className="post-basic-postedat">{post.createdAt}</p> <h3><Link to={`/post/${post.slug}`}>{post.title}</Link></h3> <p>{post.content.content}</p> <div className="post-basic-catbox"> <span className="post-basic-catname">{post.category}</span> <span className="post-basic-tagname">#タグ1</span> <span className="post-basic-tagname">#タグ2</span> <span className="post-basic-tagname">#タグ3</span> </div> </div> </div> )) } </div> </Layout> ); }; export default IndexPage; export const query = graphql` query BlogArticleQueryTop { allContentfulBlogArticle(filter: {node_locale: {eq: "ja-JP"}}) { edges { node { id title slug category content { content } thumbnail { file { url } } tags { name slug } createdAt } } } } `;
どうぞよろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/08 23:35
2020/06/08 23:40
2020/06/08 23:47
2020/06/09 00:26
2020/06/09 07:21
2020/06/09 07:34