メインコンテンツまでスキップ

ブログを作ってみよう

課題を通じて以下のブログを作成していきます。

サンプルブログ

このブログは以下の機能を持っています。

ブログの機能
  • 投稿一覧ページ
  • ページネーション
  • 投稿内容ページ
  • タグ内投稿一覧ページ
本課題で学習できること
  • データ処理
  • ページ遷移
  • クエリストリングの処理

課題01
データのダウロード

以下のURLのdata.jsファイルをダウンロードしてください。

data.jsには、ブログのデータが入っています。

data.jsのダウンロード

https://blackruffy.github.io/frontend_exercise/apps/display-blog-data/data.js

右クリックで「名前をつけて保存」を選択してください。

課題02
HTMLの作成

index.htmlを作成し、scriptタグでdata.jsを読み込んでください。

こうすることでdata.jsに定義されているBlogDataオブジェクトが他のJSファイルから使えるようになります。

課題03
全ての投稿の一覧ページを表示

BlogDataオブジェクトの構造は以下です。

const BlogData = {
// `posts`は各投稿の配列
posts: Array<{
id: number, // 投稿のID
title: string, // 投稿のタイトル
date: string, // ISO 8601 形式の投稿日時
body: string[], // 投稿内容に含まれる文の配列
tags: string[] // 投稿に紐づいたタグの配列
}>,
};

JSファイルを作成し、全ての投稿をページに表示してみましょう。

表示項目は、投稿のタイトルと日付です。

課題04
最初の10投稿の一覧ページを表示

最初の10投稿だけ表示するように修正してください。

課題05
クエリストリングをパース

このブログアプリは、クエリストリングによって表示するページを切り替えます。

以下の`クエリストリングが与えられます。

名前説明
pageページの種類。pageがない場合はblog-listとする。blog-list, blog-list-by-tag, blog-post
offset投稿一覧の投稿の開始位置。pageblog-listの時のみ。number
size投稿一覧の数。pageblog-listの時のみ。number
tagタグ。pageblog-list-by-tagの時のみ。string
id投稿のID。pageblog-postの時のみ。number

pageのそれぞれの値の意味は以下です。

名前説明
blog-list投稿一覧ページ
blog-list-by-tagタグ内投稿一覧ページ
blog-post投稿内容表示ページ

pageblog-listだと仮定して、クエリストリングをパースしてpageoffsetsizeの値を取得しましょう。

課題06
クエリストリングで指定されたページを表示

課題05で取得した`offset`と`size`に従った投稿一覧ページを表示しましょう。

課題07
ページネーション

投稿一覧ページに次のページ前のページリンクを追加し、次のページをクリックした場合は次の10投稿、前のページをクリックした場合は前の10投稿を表示する一覧ページに遷移するように修正しましょう。

課題08
投稿内容を表示

投稿一覧ページのタイトルをクリックすると、投稿内容表示ページに遷移するようにしましょう。

投稿内容を表示する場合のクエリストリングは、pageblog-postで、idが投稿のIDを指定します。

課題09
タグを表示

投稿内容表示ページに、投稿に紐づくタグを表示しましょう。

課題10
タグ内の投稿一覧ページを表示

投稿内容表示ページで投稿に紐づくタグをクリックすると、そのタグに紐づいた投稿一覧ページが表示されるように修正しましょう。

タグ内の投稿一覧を表示する場合のクエリストリングは、pageblog-list-by-tagで、tagがタグの名前を指定します。