reactjs - 如果我从函数中返回它们,我的帖子不会呈现
问题描述
我useStaticQuery
在函数组件的开头像这样从 graph-ql 获取数据
const blogs = useStaticQuery(graphql`
query {
allContentfulBlogPost(sort: { fields: publishedDate, order: DESC }) {
edges {
node {
title
publishedDate
slug
tag
}
}
}
}
`)
现在我正在尝试渲染从 graphql 获得的帖子
const renderBlogPosts = () => {
{blogs.allContentfulBlogPost.edges.map((oneEdge, i) => {
const tags = oneEdge.node.tag.split(" ")
return (
<div className="blog__post" key={`blog${i}`}>
<Link to={oneEdge.node.slug}>
<h4 className={`title${i}`}>{oneEdge.node.title}</h4>
<p className="blog__date">{oneEdge.node.publishedDate}</p>
<div style={{ display: "flex" }}>
{tags.map((oneTag, i) => {
return <p className="blog__tag" key={`tag${i}`}>{oneTag}</p>
})}
</div>
</Link>
</div>
)
})}
}
return (
<Layout>
<form onSubmit={handleSumbit}>
<input type="text" onChange={handleChange} />
<button>Search</button>
</form>
<div className="blog__container">
{renderBlogPosts()}
</div>
</Layout>
)
如您所见,我得到了renderBlogPost
将返回所有博客文章的函数。
- 函数组件内部的代码从组件返回语句中移出
- 当且仅当我通过调用函数进行渲染时,才不会渲染帖子。
- 如果我将所有代码移回组件返回语句,则帖子会很好
这个问题与graph-ql有关吗?虽然帖子没有显示我没有收到错误日志
解决方案
这不是 GraphQL 问题,当然,这是因为您的代码。在您的renderBlogPosts
功能中,您没有返回任何内容。只需将其更改为:
const renderBlogPosts = () => {
return blogs.allContentfulBlogPost.edges.map((oneEdge, i) => {
const tags = oneEdge.node.tag.split(" ")
return (
<div className="blog__post" key={`blog${i}`}>
<Link to={oneEdge.node.slug}>
<h4 className={`title${i}`}>{oneEdge.node.title}</h4>
<p className="blog__date">{oneEdge.node.publishedDate}</p>
<div style={{ display: "flex" }}>
{tags.map((oneTag, i) => {
return <p className="blog__tag" key={`tag${i}`}>{oneTag}</p>
})}
</div>
</Link>
</div>
)
})
}
return (
<Layout>
<form onSubmit={handleSumbit}>
<input type="text" onChange={handleChange} />
<button>Search</button>
</form>
<div className="blog__container">
{renderBlogPosts()}
</div>
</Layout>
)