Skip to content
This repository was archived by the owner on May 1, 2025. It is now read-only.

Commit 22b579b

Browse files
authored
feat: content/2.concepts/3.routing (#33)
1 parent d919ed8 commit 22b579b

File tree

8 files changed

+120
-5
lines changed

8 files changed

+120
-5
lines changed

content/2.concepts/2.app-vue/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,4 @@ Nuxt では `app.vue` がアプリケーションのエントリーポイント
1515
デフォルトでは、ほとんどのユースケースをカバーするように構成されており、必要に応じて設定を上書きすることができます。
1616
詳細なオプションに関しては [Nuxt 公式ドキュメント](https://nuxt.com/docs/getting-started/configuration) をご覧ください。
1717

18-
Nuxt アプリの機能をさらに拡張するには、[Routing](/concepts/routing) セクションに進んで、アプリをマルチページにする方法を学びましょう。
18+
Nuxt アプリの機能をさらに拡張するには、[ルーティング](/concepts/routing) セクションに進んで、アプリをマルチページにする方法を学びましょう。

content/2.concepts/3.routing/.template/files/pages/foo.vue

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
<template>
22
<div>
3-
Foo
3+
<div>
4+
Foo
5+
</div>
46
<div>
57
<NuxtLink to="/">
68
Index

content/2.concepts/3.routing/.template/files/pages/index.vue

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
<template>
22
<div>
3-
Hello!
3+
<div>
4+
Hello!
5+
</div>
46
<div>
57
<NuxtLink to="/foo">
68
Foo
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<template>
2+
<NuxtPage />
3+
</template>
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<template>
2+
<div>
3+
<div>
4+
Foo
5+
</div>
6+
<div>
7+
<NuxtLink to="/">
8+
Index
9+
</NuxtLink>
10+
</div>
11+
<div>
12+
<NuxtLink to="/posts/1">
13+
Posts/1
14+
</NuxtLink>
15+
</div>
16+
</div>
17+
</template>
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<template>
2+
<div>
3+
<div>
4+
Hello!
5+
</div>
6+
<div>
7+
<NuxtLink to="/foo">
8+
Foo
9+
</NuxtLink>
10+
</div>
11+
<div>
12+
<NuxtLink to="/posts/1">
13+
Posts/1
14+
</NuxtLink>
15+
</div>
16+
</div>
17+
</template>
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<script setup lang="ts">
2+
const route = useRoute()
3+
const id = computed(() => route.params.id)
4+
</script>
5+
6+
<template>
7+
<div>
8+
<div>
9+
Posts/{{ id }}
10+
</div>
11+
<NuxtLink to="/foo">
12+
Foo
13+
</NuxtLink>
14+
<div>
15+
<NuxtLink to="/">
16+
Index
17+
</NuxtLink>
18+
</div>
19+
<div />
20+
</div>
21+
</template>

content/2.concepts/3.routing/index.md

Lines changed: 55 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,59 @@
22
ogImage: true
33
---
44

5-
# Routing
5+
# ルーティング
66

7-
[Back to index](/)
7+
## ファイルシステムルーター
8+
9+
ファイルシステムルーターは Nuxt の主要機能の一つです。\
10+
`pages/` ディレクトリ内の各 Vue ファイルが、それに対応する URL(ルート)を作成し、そのファイルの内容を表示します。\
11+
この例では、`pages/index.vue``/` に、`pages/foo.vue``/foo` に対応しています。\
12+
このルーティングは [vue-router](https://router.vuejs.org/) をベースに実装されています。
13+
14+
また、Nuxt は各ページに対してコード分割等の最適化により、リクエストされたルートに対して最小限の JavaScript を配信します。
15+
16+
## ナビゲーション
17+
18+
`pages/` にルートを作成したら、`<NuxtLink>` コンポーネントを使うことでナビゲーションを行うことができます。
19+
20+
`<NuxtLink>` コンポーネントでは `to` という props にルートを指定することでリンクを作成することができます。\
21+
`<NuxtLink>` コンポーネントは自動的に最適化されるため、通常の `<a>` 要素と、`href` 属性を利用したリンクの作成と比べ、高速にナビゲーションを行うことができます。
22+
23+
## ルートパラメータ
24+
25+
`/pages` ディレクトリでは、ファイル名の一部を `[]` で囲うことで動的なルーティングを定義することができます。(例: `pages/posts/[id].vue`)
26+
27+
この `[]` で囲われたルートパラメータは `useRoute()` を通じてアクセスすることができます。
28+
29+
```vue
30+
<!-- pages/posts/[id].vue -->
31+
<script setup lang="ts">
32+
const route = useRoute()
33+
34+
// /posts/1 にアクセスした際、route.params.id は 1 になる
35+
console.log(route.params.id)
36+
</script>
37+
```
38+
39+
## チャレンジ
40+
41+
`/posts/[id]` というルートを作成し、 `/`, `/foo` からナビゲーション出来るように実装してみましょう。
42+
`/posts/[id]` では、ルートパラメータから `id` を読み取り、その値を画面に表示してみましょう。
43+
44+
そのためには:
45+
46+
1. `pages` ディレクトリに `posts` ディレクトリを作成します。
47+
2. `pages/posts` ディレクトリ内に `[id].vue` ファイルを作成します。
48+
3. `[id].vue` ファイル内で `useRoute()` を使って params から `id` を取得し、画面に表示します。
49+
4. `pages/index.vue``pages/foo.vue``<NuxtLink>` コンポーネントを使って `/posts/[id]` にナビゲーションするリンクを作成します。\
50+
ここでは例として、`/posts/1` にナビゲーションするリンクを作成してみましょう。\
51+
(実際には値は任意のもので構いません。)
52+
53+
もし行き詰まったら、以下のボタンかエディタの右上にあるボタンをクリックして回答を見ることができます。
54+
55+
:ButtonShowSolution{.bg-faded.px4.py2.rounded.border.border-base.hover:bg-active.hover:text-primary.hover:border-primary:50}
56+
57+
---
58+
59+
ここで登場した、`useRoute` 関数や `<NuxtLink>` コンポーネント、Nuxt のコアコンセプトの一つである Auto Imports によって自動的に import されるため、import 文を記載することなく利用することができます。\
60+
[Auto Imports](/concepts/auto-imports) について次のセクションでより詳しく学びましょう。

0 commit comments

Comments
 (0)