nuxt logo

ドキュメント翻訳(非公式)

ビュー

Nuxtは、アプリケーションのユーザーインターフェースを実装するためのいくつかのコンポーネントレイヤーを提供します。

app.vue

app.vueファイルはアプリケーションのエントリーポイントです

デフォルトでは、Nuxtはこのファイルをエントリーポイントとして扱い、アプリケーションのすべてのルートに対してその内容をレンダリングします。

app/app.vue
<template>
  <div>
   <h1>ホームページへようこそ</h1>
  </div>
</template>

Vueに慣れている方は、通常Vueアプリを作成するmain.jsがどこにあるのか疑問に思うかもしれません。Nuxtはこれを裏で処理します。

コンポーネント

コンポーネントは再利用可能なUIの部品です

ほとんどのコンポーネントは、ボタンやメニューのようなユーザーインターフェースの再利用可能な部品です。Nuxtでは、これらのコンポーネントをapp/components/ディレクトリに作成することができ、明示的にインポートすることなくアプリケーション全体で自動的に利用可能になります。

<template>
  <div>
    <h1>ホームページへようこそ</h1>
    <AppAlert>
      これは自動インポートされたコンポーネントです。
    </AppAlert>
  </div>
</template>

ページ

ページは特定のルートに結びついたビューです

ページは、各特定のルートパターンに対するビューを表します。app/pages/ディレクトリ内の各ファイルは、その内容を表示する異なるルートを表します。

ページを使用するには、app/pages/index.vueファイルを作成し、app/app.vue<NuxtPage />コンポーネントを追加します(またはデフォルトのエントリーとしてapp/app.vueを削除します)。新しいファイルをapp/pages/ディレクトリに追加することで、さらにページとそれに対応するルートを作成できます。

<template>
  <div>
    <h1>ホームページへようこそ</h1>
    <AppAlert>
      これは自動インポートされたコンポーネントです
    </AppAlert>
  </div>
</template>
こちらも参照 ルーティングセクション

レイアウト

レイアウトはページを囲むラッパーです

レイアウトは、ヘッダーやフッターの表示など、複数のページに共通のユーザーインターフェースを含むページを囲むラッパーです。レイアウトは、ページの内容を表示するために<slot />コンポーネントを使用するVueファイルです。app/layouts/default.vueファイルがデフォルトで使用されます。カスタムレイアウトはページのメタデータの一部として設定できます。

アプリケーションに単一のレイアウトしかない場合は、app/app.vue<NuxtPage />を使用することをお勧めします。

<template>
  <div>
    <NuxtLayout>
      <NuxtPage />
    </NuxtLayout>
  </div>
</template>

より多くのレイアウトを作成し、それらをページで使用する方法を学びたい場合は、レイアウトセクションで詳細を確認してください。

上級: HTMLテンプレートの拡張

<head>を変更するだけでよい場合は、SEOとメタセクションを参照してください。

Nitroプラグインを追加してフックを登録することで、HTMLテンプレートを完全に制御できます。render:htmlフックのコールバック関数を使用して、クライアントに送信される前にHTMLを変更できます。

server/plugins/extend-html.ts
export default defineNitroPlugin((nitroApp) => {
  nitroApp.hooks.hook('render:html', (html, { event }) => {
    // これはHTMLテンプレートのオブジェクト表現になります。
    console.log(html)
    html.head.push(`<meta name="description" content="My custom description" />`)
  })
  // ここでレスポンスをインターセプトすることもできます。
  nitroApp.hooks.hook('render:response', (response, { event }) => { console.log(response) })
})
こちらも参照 guide > going-further > hooks