🖥️
Next.js入門1 ページ追加
記事一覧
- Next.js × Docker 最速環境構築
- Next.js入門1 ページ追加
- Next.js入門2 コンポーネント
- Next.js入門3 無記名関数 & イベントハンドラー
- Next.js入門4 Hooks
- Next.js入門5 Todoアプリ(タスク一覧)
- Next.js入門6 Todoアプリ(タスク追加)
- Next.js入門7 Todoアプリ(タスク詳細)
- Next.js入門8 Todoアプリ(タスク編集, 削除)
ルーティング
ルーティングとは
特定のURLにアクセスした際に実行する処理を割り当てること
ルーティングの種類
Next.jsのルーティングの種類にはPage Router
とApp Router
がします
これぐらいの考え方で大丈夫です
- Page Router -> 古い方法
- App Router -> 新しい方法
今回はApp Routerを使用します。
App Router
App Routerには以下のようなルールがあります
-
app
ディレクトリ内がルーティングになる -
page.tsx
ファイルを使用すること -
app
ディレクトリからpage.tsx
までのパスがそのままurlのパスになる
ファイル作成
-
http://localhost:3000/top でアクセスできるページを作るために、
app/top
にpage.tsxを作成
.
├── next-app
│ └── app
│ └── top
│ └── page.tsx # ここに作成する
├── docker-compose.yml
└── Dockerfile
- page.tsxを記述
// htmlブロックを返す関数を定義
function Page() {
return (
<div>トップページ</div>
);
}
// export default 関数名; とすることでページ用の関数として使用できる
export default Page;
-
http://localhost:3000/top にアクセスして以下のような画面が出ればOK
Tailwind CSS
Tailwind CSSとは
特定のクラスにあらかじめスタイルが紐付けられているCSSフレームワーク
-> Next.jsのプロジェクト作成時にインストール済み
使用例
- page.tsx
function Page() {
return (
// tsxファイルではclassの代わりにclassNameを使用する
// text-red-500クラスはcolor: #ef4444;に相当する
// text-6xlクラスは見出し1サイズに相当する
<div className="text-red-500 text-6xl">トップページ</div>
);
}
export default Page;
チートシート
- 以下を使うと、CSSとTailwind CSSの対応を検索できます。
https://www.creative-tim.com/twcomponents/cheatsheet/ - ChatGPTなどに
display: flex;をtailwindにして
のように送信し、生成してもらうのも⭕️
JavaScriptを使用する
変数の使用
- page.tsx
function Page() {
// 変数を定義
const title = "トップページ";
return (
// 中括弧を使用することで変数の値を使用可能
<div className="text-6xl">{title}</div>
);
}
export default Page;
条件による表示分岐
- page.tsx
function Page() {
const isLoading = true;
return (
<div className="text-6xl">
{ isLoading ? "ローディング中..." : "トップページ" }
</div>
);
}
export default Page;
ループで繰り返し要素を作成
function Page() {
const users = [
{ name: "佐藤 太郎", age: 24 },
{ name: "鈴木 花子", age: 30 },
{ name: "高橋 次郎", age: 27 },
];
return (
<table>
<thead>
<tr>
<th>名前</th>
<th>年齢</th>
</tr>
</thead>
<tbody>
{users.map((user, index) => (
<tr key={index}>
<td>{user.name}</td>
<td>{user.age}</td>
</tr>
))}
</tbody>
</table>
);
}
export default Page;
Discussion