javascript - 显示前 6 篇文章
问题描述
我是盖茨比的新手。所以我想显示在 WordPress 中发表的前 6 篇文章这是我的 Component 内容:
import React from 'react';
import {graphql, StaticQuery} from 'gatsby';
const Actualites = () => (
<StaticQuery query={graphql`{
allWordpressPost(filter: {categories: {elemMatch: {name: {eq: "Actualités"}}}}) {
edges {
node {
date
title
tags {
name
}
categories {
name
}
featured_media {
source_url
}
}
}
}
}`
} render={data =>
{
return (
<div className="itemList">
<ul>
{data.allWordpressPost.edges[0].node.map(
prop => {
return(
<li className="itemNews">
<span>{prop.date}</span>
{data.allWordpressPost.edges[0].node.tags.map(
prop => {
return(
<span>{prop.name}</span>
)
}
)}
{data.allWordpressPost.edges[0].node.featured_media.map(
prop => {
return(
<div className="itemImage">{prop.source_url}</div>
)
}
)}
<div className="itemTitle">
{prop.title}
</div>
</li>
)
}
)}
</ul>
</div>
)
}}
/>
);
export default Actualites;
我收到以下错误:
TypeError: data.allWordpressPost.edges[0].node.map is not a function
所以我想知道如何去做。此外,如何增加它只显示最近的 6 篇文章?
谢谢你 !!!
解决方案
data.allWordpressPost.edges[0]
是您的第一篇文章,因为您的数据存储在节点内部,因此您无法映射它。首先,如果您想要前 6 个帖子,您需要添加limit
GraphQL 选项:
graphql`{
allWordpressPost(
filter: {categories: {elemMatch: {name: {eq: "Actualités"}}}},
limit: 6) {
edges {
node {
date
title
tags {
name
}
categories {
name
}
featured_media {
source_url
}
}
}
}
}`
此外,如何增加它只显示最近的 6 篇文章?
您需要在sort
DESC
发布日期之前。就像是:
allWordpressPost(
filter: {categories: {elemMatch: {name: {eq: "Actualités"}}}},
limit: 6
sort: { order: DESC, fields: [date] })
有关更多详细信息和排序,请查看Gatsby 的 GraphQL 文档。
查询完 6 篇文章后,您需要遍历它们以打印它。
<ul>
{data.allWordpressPost.edges.node.map((article) => {
return (
<li className="itemNews">
<span>{article.date}</span>
{article.tags.map((prop) => {
return <span>{prop.name}</span>;
})}
{article.featured_media.map((prop) => {
return <div className="itemImage">{article.source_url}</div>;
})}
<div className="itemTitle">{article.title}</div>
</li>
);
})}
</ul>;
我已将可迭代变量重命名为,article
而不是prop
因为它更具可读性。因此,在每个循环中,您都在打印每篇文章。在主循环内部,您只需要遍历article
获取tags
和featured_media
.
您的最终代码:
const Actualites = () => (
<StaticQuery
query={graphql`
{
allWordpressPost(
filter: { categories: { elemMatch: { name: { eq: "Actualités" } } } },
limit: 6,
sort: { fields: [date], order: DESC }
) {
edges {
node {
date
title
tags {
name
}
categories {
name
}
featured_media {
source_url
}
}
}
}
}
`}
render={(data) => {
return (
<div className="itemList">
<ul>
{data.allWordpressPost.edges.node.map((article) => {
return (
<li className="itemNews">
<span>{article.date}</span>
{article.tags && article.tags.map((prop) => {
return <span>{prop.name}</span>;
})}
{article.featured_media && article.featured_media.map((prop) => {
return (
<div className="itemImage">{article.source_url}</div>
);
})}
<div className="itemTitle">{article.title}</div>
</li>
);
})}
</ul>
;
</div>
);
}}
/>
);
export default Actualites;
我添加了一个控件来检查一个帖子是否没有tags
( article.tags && article.tags.map
) 或featured_media
( article.featured_media && article.featured_media.map
)。如果您将 Babel 配置为编译它,您可以添加ECMAScript 2020的可选链接功能,article?.tags?.map
以用更少的代码实现相同的功能。
推荐阅读
- blazor - 如何在 Blazor 应用程序的 HTML 标记中引用 C# 变量?
- javascript - 如果满足条件,有什么方法可以为特定列表项添加边框?
- ios - Xamarin 表单视频缩略图:尝试在 IOS 13.1.3 设备上创建视频缩略图表单本地存储时出错
- unit-testing - 我能写什么,这样我就可以测试从我的账户中取钱
- javascript - 如何减少一小段代码的重复性?
- javascript - 从数据到 asyncData
- javascript - 我的偏移量似乎正在工作,但分页在每个页面上都显示相同的列表
- vba - Outlook Application_Quit 事件未触发
- python - 烧瓶 - 如何发送数据并将其取回
- jquery - jQuery Object 在第二轮循环中重写自己