组件来显示每个列表项
将以下代码添加到 blog.astro
中,以返回关于所有 Markdown 文件的信息。Astro.glob()
将返回一个对象数组,每个博客文章对应一个对象。
---
import BaseLayout from '../layouts/BaseLayout.astro'const allPosts = await Astro.glob('../pages/posts/*.md');
const pageTitle = "我的 Astro 学习博客";
---
<BaseLayout pageTitle={pageTitle}>
<p>在这里,我将分享我的学习 Astro 的之旅。</p>
<ul>
<li><a href="/posts/post-1/">第一篇文章</a></li>
<li><a href="/posts/post-2/">第二篇文章</a></li>
<li><a href="/posts/post-3/">第三篇文章</a></li>
</ul>
</BaseLayout>
为了动态生成整个文章列表,展示文章的标题和链接,将个别的 <li>
标签替换为以下 Astro 代码:
---
import BaseLayout from '../layouts/BaseLayout.astro'
const allPosts = await Astro.glob('../pages/posts/*.md');
const pageTitle = "我的 Astro 学习博客";
---
<BaseLayout pageTitle={pageTitle}>
<p>在这里,我将分享我的学习 Astro 的之旅。</p>
<ul> <li><a href="/posts/post-1/">Post 1</a></li> <li><a href="/posts/post-2/">Post 2</a></li> <li><a href="/posts/post-3/">Post 3</a></li>
{allPosts.map((post) => <li><a href={post.url}>{post.frontmatter.title}</a></li>)}
</ul>
</BaseLayout>
通过对 Astro.glob()
返回的数组进行映射,你的整个博客文章列表现在是动态生成的。
通过在 src/pages/posts/
中创建一个新的 post-4.md
文件并添加一些 Markdown 内容来添加一个新的博客文章。请确保至少包含下面使用的 frontmatter
---
layout: ../../layouts/MarkdownPostLayout.astro
title: '我的第四篇博客文章'
author: 'Astro 学习者'
description: "这篇文章会自己出现在列表中!"
image:
url: "https://www.wenjiangs.com/wp-content/uploads/2024/astro/default-og-image.png"
alt: "The word astro against an illustration of planets and stars."
pubDate: 2022-08-08
tags: ["astro", "successes"]
---
这篇文章应该会与其他的博客文章一起显示,因为 `Astro.glob()` 会返回一个包含所有文章的列表,以创建这个文章列表。
在浏览器预览中重新访问博客页面 http://localhost:4321/blog
,并查看更新后的包含四篇文章的列表,其中包括你的新博客文章!
尝试自己对 Astro 项目进行所有必要的更改,以便你可以使用以下代码来生成博客文章列表:
src/pages/blog.astro<ul> {allPosts.map((post) => <li><a href={post.url}>{post.frontmatter.title}</a></li>)} {allPosts.map((post) => <BlogPost url={post.url} title={post.frontmatter.title} />)}
</ul>
在 src/components/
中创建一个新的组件。
BlogPost.astro
编写组件中的代码行,以便它能够接收 title
和 url
作为 Astro.props
。
---
const { title, url } = Astro.props;
---
添加用于创建博客文章列表中的每个项目的模板。
<li><a href={url}>{title}</a></li>
将新组件导入到博客页面中。
---
import BaseLayout from '../layouts/BaseLayout.astro';import BlogPost from '../components/BlogPost.astro';
const allPosts = await Astro.glob('../pages/posts/*.md');
const pageTitle = "我的 Astro 学习博客";
---
自己检查:查看已完成的组件代码。
---
const { title, url } = Astro.props
---
<li><a href={url}>{title}</a></li>
src/pages/blog.astro---
import BaseLayout from '../layouts/BaseLayout.astro';import BlogPost from '../components/BlogPost.astro';
const allPosts = await Astro.glob('../pages/posts/*.md');
const pageTitle = "我的 Astro 学习博客"
---
<BaseLayout pageTitle={pageTitle}>
<p>在这里,我将分享我的学习 Astro 的之旅。</p>
<ul> {allPosts.map((post) => <BlogPost url={post.url} title={post.frontmatter.title} />)}
</ul>
</BaseLayout>
如果你的 Astro 组件包含以下代码行:
---
const myPosts = await Astro.glob('../pages/posts/*.md');
---
选出你可以用以下哪种语法来表示:
你的第三篇博客文章的标题。
指向你的第一篇博客文章的 URL 的链接。
每篇文章的上次更新的日期的组件。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论