↓メインコンテンツだよ\(^o^)/

Nuxt3 の基本を学ぼう!🔥わーい

NUXT_TMP は Nuxt3 のテンプレートで、基本的な使い方の一部を学ぶことができます。
Nuxt を導入する際の準備⧉ 済みであることが前提になります。
それでは、VScode で NUXT_TMP のプロジェクトを開いておいて下さい。

より詳しい基本的な情報は ドキュベース Nuxt3 関連情報 Index ⧉ を参照してください。

画像などの静的ファイルや静的ページ

Q: Nuxt のプロジェクトでは全てのページを .vue ファイルで作らなくちゃいけないの?

A:いいえ、Nuxtの恩恵が不要なら HTMLで作成・設置しても大丈夫です。
こちらのページ は .vue ファイルではなく、HTML ファイルで作成されています。
ペライチのページなど、どうしても HTMLファイルにする必要がある場合は、 src/public ディレクトリ以下に HTMLファイルを配置することで、ページとして表示することが出来ます。
src/public/page-of-public/index.html の存在を確認して下さい。

ただし、よほどのことがない限り、.vue ファイルで作成することをお勧めします。
なぜなら、ルーティングが src/pages と src/public に分散されることで、 ややこしくなりメンテナンス性が下がるからです。

静的ファイルについては こちら⧉ も参照下さい。

Q: 画像などの静的ファイルはどうすれば良いの?

A:同様に src/public ディレクトリ以下に配置して下さい。
src/public/img/Lux.jpg の存在を確認して下さい。 Lux.jpg

Q: /common_img もローカルに用意しなきゃいけないの?

A:いいえ。/common_img の画像はプロキシで DEVサーバから取得表示します。
そこらへんの詳細は こちら⧉ を参照して下さい。

↓こちらは、common_img の画像を proxy で取得・表示してます。
nose.jpg

💡Tips
ただし、プロキシを使う /common_img の画像を表示するには、 v-bind で指定しないとそのプロキシは効かないので注意する❗

こう書く
<img
  :src="TEST_COMMON_IMG_PATH"
  alt="nose.jpg"
  width="300"
>
APIから取得したデータの PATH を表示するので、 必ず v-bind を使うことになると思いますが。

ここのコンポーネントは src/components/sample/StaticComponent.vue です。

component について

Component は、部品的に要素を切り出して再利用するための仕組みです。
このコンポーネントは、props で受け取った classData を使ってスタイリングしています。

↓親コンポーネントから受け取った props の内容↓

{
  "classData": {
    "summary": "cursor-pointer text-xl px-3 py-2",
    "details": "mb-2 bg-white p-2",
    "p": "mb-2 px-3 py-2",
    "link": "text-blue-700 underline hover:text-purple-700",
    "code": "bg-gray-200 p-2"
  }
}

このように要素を分割することで、コードの再利用性が向上するほか、メンテナンス性も向上します。
コンポーネントについて⧉ も参考にして下さい。

ここのコンポーネントは src/components/sample/CompComponent.vue です。

ページ、レイアウト の切り分け

ページは、「src/pages」ディレクトリにファイルを作成すればルーティングされ、 そのファイルがページとして認識されます。
ページの作成について⧉ に詳しく記載していますので、参考にしてください。

レイアウト⧉ は、ヘッダーやフッターなどの共通部分を切り出して再利用するための仕組みです。
複数作成してページごとに切り替えることが可能です。 例えば、ログインページにはヘッダーやフッターを表示しないようにするなどが可能です。

現在の NUXT_TMP では、このページと /about では、別のレイアウト使ってますので、ご確認下さい。

ここのコンポーネントは src/components/sample/PagesLayoutsComponent.vue です。

エラーページ

Nuxt では、何かしらのエラーが発生した場合のエラーページを設定することがが出来ます。

例えば、404 ページが存在しないページにアクセスした場合などです。
👉 存在しないページにアクセスしてみる
↑で表示されるページは、src/error.vue を経由して src/components/error/404Component.vue が表示されてます。

また、任意のタイミングでエラーを発生させることも可能です。
👉 エラーを発生させるページに行く
実際のエラー発生は、src/pages/error-test/index.vue のファイルを確認して下さい。

リンクでのサイト内移動(遷移)について

Nuxt のリンクには、通常の <a/> タグとは別に、 <NuxtLink /> とというコンポーネントが用意されています。
これを使うと、 <a> タグと違いページ移動時にブラウザの全体のリロードが発生しません。
これにより、ページ遷移時のネットワーク通信が減りパフォーマンスが向上したり、 遷移時にアニメを適用したりすることが可能になります。

詳細は 公式 NuxtLink ⧉ を参照してください。

ちなみに、このページの右上の「 About 」は <NuxtLink /> で、 一番右にある「 static page Html 」は <a /> タグでリンクしています。

ここのコンポーネントは src/components/sample/LinkComponent.vue です。

ref() でリアクティブにする

まずは、Vue3(Nuxt3 のベースとなるフレームワーク)の基本である ref() についてを、このページで簡単に説明します。
「src/pages/index.vue」を開いてコードを確認してください。

仕組みは↓こんな感じです。

  • const change = ref(false); で、変数をリアクティブにしています
  • 次に button に @click="change = !change" と、クリックした時に change の値を反転させる処理を追加しています。
  • 最後に {{ change? '💩うんこ' : '🍖お肉' }} の部分で、change の値によって表示する文字が変わるようになってます。

  • このように、ref() を使うことで、変数をリアクティブにすることができます。

    ref() はNuxt で開発する上での「基礎」となるので、しっかりと理解しておきましょう。 ref() について⧉ も参照下さい。

    ここのコンポーネントは src/components/sample/RefComponent.vue です。

    composable で切り分ける

    composable は Vue3 で導入されたカスタムフックのようなものです。 ロジックを切り分けて、再利用性を高めることができます。

    ☆ Composable 未使用

    Index page | from Composable

    Index page description | from Composable

    src/components/sample/ComposableNoComponent

    ☆ Composable使用

    Index page | from Composable

    Index page description | from Composable

    src/components/sample/ComposableUseComponent

    これら2つのコンポーネントは全く同じ処理をしてますが、 左側は直接コンポーネント内で処理して、右側はその処理を composable に切り分けています。

    それぞれのコンポーネントを見比べてみてください。
    どちらも同じ結果を返しますが、コードの見通しや再利用性を考えると composable を使う方が良いのが分かります。

    👉 Composable については Nuxt3 でのページ作成の流れ の Composable の項目を参照してください。

    グローバルな状態管理 には Pinia を使う

    「/pinia」で 0 回クリックしました。

    ref() はコンポーネントの中だけでリアクティブな変数を作成する関数ですが、 サイト全体でのグローバルな状態管理を行うには Pinia を使うことで可能になります。 専用の別ページ を作ったので移動して確認してください。

    jQuery.ajax() に代わる Ajax のやり方

    「useApi()」という関数(composable)を使うことで、簡単に ajax 処理をすることが出来ます。
    実は、useApi は useFetch という関数のラッパーですYO。 詳細は useFetch を拡張した useApi について⧉ を参照下さい。

    さて、fetch(ajax)については fetch-test/index で動作確認をしながら説明していますので、移動して、 「/pages/fetch-test/index.vue」を VSCode で開いてください。

    ↑メインコンテンツだよ\(^o^)/