FanMa 博客 包含了关于前端学习的一系列内容,涵盖了 HTML、CSS、JavaScript、TypeScript、React、Next.js 等全栈方面的学习笔记。博客以技术为核心,深入浅出地讲解了这些技术的基础概念、实际应用以及最佳实践,并且结合了博主的个人经验和实践经历进行分享,有助于读者更好地理解和掌握这些技术。如果你有前端学习的需求或者对这些技术感兴趣,那么 FanMa 博客 将是帮助你实现这些目标的绝佳资源。

使用 Next.js 完善文章内容,添加标题和格式化日期
- 545

添加文章页面的标题

pages/posts/[id].js 文件中,让我们使用文章数据添加 title 标签。您需要在文件顶部添加 next/headimport ,并通过更新 Post 组件添加 title 标签:

import Head from 'next/head';

export default function Post({ postData }) {
  return (
    <Layout>
      {/* Add this <Head> tag */}
      <Head>
        <title>{postData.title}</title>
      </Head>

      {/* Keep the existing code here */}
    </Layout>
  );
}

格式化日期

要格式化日期,我们将使用 date-fns 库。首先,安装它:

注意:这一步其实我们在项目一开始就已经做了,这里就不需要再安装 date-fns 库了,可以跳过安装 date-fns 这一步。

npm install date-fns

接下来,创建一个叫做 components/date.js 的文件,并添加以下日期组件:

import { parseISO, format } from 'date-fns';

export default function Date({ dateString }) {
  const date = parseISO(dateString);
  return <time dateTime={dateString}>{format(date, 'LLLL d, yyyy')}</time>;
}

注意:您可以在 date-fns 网站上查看不同的格式()字符串选项。

现在,打开 pages/posts/[id].js ,添加一个 Date 组件的导入,在 {postData.date} 上使用它:

// Add this import
import Date from '../../components/date';

export default function Post({ postData }) {
  return (
    <Layout>
      {/* Keep the existing code here */}

      {/* Replace {postData.date} with this */}
      <Date dateString={postData.date} />

      {/* Keep the existing code here */}
    </Layout>
  );
}

如果您访问 http://localhost:3000/posts/pre-rendering ,则现在应该看到日期已写为 January 1, 2023

添加CSS

最后,让我们使用我们之前添加的 styles/utils.module.css 文件添加一些CSS。打开 pages/posts/[id].js ,然后添加CSS文件的导入,并将 Post 组件替换为以下代码:

import utilStyles from '../../styles/utils.module.css';

export default function Post({ postData }) {
  return (
    <Layout>
      <Head>
        <title>{postData.title}</title>
      </Head>
      <article>
        <h1 className={utilStyles.headingXl}>{postData.title}</h1>
        <div className={utilStyles.lightText}>
          <Date dateString={postData.date} />
        </div>
        <div dangerouslySetInnerHTML={{ __html: postData.contentHtml }} />
      </article>
    </Layout>
  );
}

如果您访问 http://localhost:3000/posts/pre-rendering ,则页面现在应该看起来更好:

干得好!接下来我们将完善索引页面,然后就完成啦!