vue-routerの設定
実習編目標
- API を利用するクライアントを書く
- 複数ページが存在するクライアントを書く
WARNING
前回に作成したサーバーを利用します。先に前回の内容を終わらせるようにしてください。
今回は「エンドポイントにアクセスする」に書いてある最重要課題を一番やってほしいです。 途中のコードなどはバシバシコピー&ペーストしてもらっても構いません。
最重要課題はこれまでのコードを上手く組み合わせることで実現できるはずです。 どのような API が必要か、それをどうやって表示すればいいかを自分で考えて作ってみましょう。
Vueのプロジェクトを作成する
第一部のVue入門の時と同じように https://github.com/traPtitech/naro-template-frontend のテンプレートリポジトリからリポジトリを作成します。 クローンしてきたディレクトリを VSCode で開いておきましょう。 npm iするのを忘れずに。
Vue Routerの導入
SPA を作る際には、pathに応じたページを描画する Router のような補助ライブラリが使用すると便利です。 今回は、公式 Router であるVue Router v4.xを使用します。
参考: Routing | Vue.js
1. ライブラリのインストール
npm install vue-router@4 を実行してください。
2. Routerの設定
pathと描画対象の関係である Route を定義します。 src以下に、router.tsを以下の内容で作成してください。
import { createRouter, createWebHistory } from 'vue-router'
import HomePage from './pages/HomePage.vue'
import NotFound from './pages/NotFound.vue'
const routes = [
{ path: '/', name: 'home', component: HomePage },
{ path: '/:path(.*)*', component: NotFound }
]
const router = createRouter({
history: createWebHistory(),
routes
})
export default routerVue Router を定義しているファイルです。
ページを追加したい場合は、routesの中にオブジェクトを追加していけば OK です。
参考: Routes' Matching Syntax | Vue Router
App.vue に書かれている、<router-view/>コンポーネントが、このファイルで指定されたコンポーネントに置き換えられ描画されます。
参考:router-link | Vue Routerrouter-view | Vue Router
Vue Router
3. Vue Routerの使用
Vue Router を読み込むようにsrc/main.tsを以下のように変更します。
import { createApp } from 'vue'
import App from './App.vue'
import Router from './router'
createApp(App).use(Router).mount('#app')次に、src/App.vueを以下のように変更します。
<template>
<main>
<div :class="$style.container">
<header :class="$style.header">
<router-link to="/">Home</router-link>
</header>
<router-view />
</div>
</main>
</template>
<style module>
.container {
max-width: fit-content;
margin: auto;
}
.header {
display: flex;
justify-content: center;
}
</style>INFO
<router-view>というコンポーネントは自身のpathに応じて描画するコンポーネントを変えるものです。その設定をrouter.tsで行っています。
また、<router-link>は<a>タグのようにリンクとして働きますが、ページのリロードを引き起こしません。これによってページの移動の速度を向上させることができます。
4. Homeページの作成
src直下にpagesディレクトリを作成し、src/pages/HomePage.vueを以下の内容で作成してください。
<script setup lang="ts">
import HelloWorld from '../components/HelloWorld.vue'
</script>
<template>
<hello-world msg="Hello Vue 3 + Vite" />
</template>5. NotFoundページの作成
router.tsに定義した Route の配列は先頭からマッチします。
export const routes = [
{ path: '/', name: 'home', component: HomePage },
{ path: '/:path(.*)*', component: NotFound }
]この後、皆さんにはいくつかのページとそのpathの対応を追加してもらうわけですが、どのpathにもマッチしなかった場合、任意のpathにマッチする/:path(.*)*がマッチし、NotFound ページが表示されます。
src/pages/NotFound.vueを以下の内容で作成してください。
<template>
<header>
<h1>Not Found {{ $route.path }}</h1>
</header>
</template>初期状態の確認
WARNING
PC にインストールされているセキュリティソフトによっては開発ページにアクセスできないことがあるようです。 その場合は、セキュリティソフトのファイアウォールを一時的に停止するか、ターミナルからnpm run devで起動した後、表示される IP アドレスでの URL にアクセスしてみてください(できない場合は TA に聞いてください)
これまでと同様にnpm run devで起動して、以下のような画面が表示されていれば OK です。
