We’ll now add blog data to our app using the file system. Each blog post will be a markdown file.
posts
(this is not the same as pages/posts
).pre-rendering.md
and ssg-ssr.md
.Copy the following to pre-rendering.md
:
--- title: 'Two Forms of Pre-rendering' date: '2020-01-01' --- Next.js has two forms of pre-rendering: **Static Generation** and **Server-side Rendering**. The difference is in **when** it generates the HTML for a page. - **Static Generation** is the pre-rendering method that generates the HTML at **build time**. The pre-rendered HTML is then _reused_ on each request. - **Server-side Rendering** is the pre-rendering method that generates the HTML on **each request**. Importantly, Next.js lets you **choose** which pre-rendering form to use for each page. You can create a "hybrid" Next.js app by using Static Generation for most pages and using Server-side Rendering for others.
Copy the following to ssg-ssr.md
:
--- title: 'When to Use Static Generation v.s. Server-side Rendering' date: '2020-01-02' --- We recommend using **Static Generation** (with and without data) whenever possible because your page can be built once and served by CDN, which makes it much faster than having a server render the page on every request. You can use Static Generation for many types of pages, including: - Marketing pages - Blog posts - E-commerce product listings - Help and documentation You should ask yourself: "Can I pre-render this page **ahead** of a user's request?" If the answer is yes, then you should choose Static Generation. On the other hand, Static Generation is **not** a good idea if you cannot pre-render a page ahead of a user's request. Maybe your page shows frequently updated data, and the page content changes on every request. In that case, you can use **Server-Side Rendering**. It will be slower, but the pre-rendered page will always be up-to-date. Or you can skip pre-rendering and use client-side JavaScript to populate data.
You might have noticed that each markdown file has a metadata section at the top containing
title
anddate
. This is called YAML Front Matter, which can be parsed using a library called gray-matter.
getStaticProps
Now, let’s update our index page (pages/index.js
) using this data. We’d like to:
title
, date
, and file name (which will be used as id
for the post URL).To do this on pre-render, we need to implement getStaticProps
.
Let’s do it on the next page!