コンテンツにスキップ

ランタイム API

VitePress は、アプリデータにアクセスするためのいくつかの組み込み API を提供しています。VitePress には、グローバルに使用できる組み込みコンポーネントもいくつか付属しています。

ヘルパーメソッドは `vitepress` からグローバルにインポート可能で、通常はカスタムテーマの Vue コンポーネントで使用されます。ただし、Markdown ファイルは Vue の 単一ファイルコンポーネント にコンパイルされるため、`.md` ページ内でも使用できます。

`use*` で始まるメソッドは、`setup()` または `<script setup>` 内でのみ使用できる Vue 3 コンポジション API 関数(「Composable」)であることを示します。

`useData` コンポーザブル

ページ固有のデータを返します。返されるオブジェクトは次の型を持ちます

ts
interface VitePressData<T = any> {
  /**
   * Site-level metadata
   */
  site: Ref<SiteData<T>>
  /**
   * themeConfig from .vitepress/config.js
   */
  theme: Ref<T>
  /**
   * Page-level metadata
   */
  page: Ref<PageData>
  /**
   * Page frontmatter
   */
  frontmatter: Ref<PageData['frontmatter']>
  /**
   * Dynamic route params
   */
  params: Ref<PageData['params']>
  title: Ref<string>
  description: Ref<string>
  lang: Ref<string>
  isDark: Ref<boolean>
  dir: Ref<string>
  localeIndex: Ref<string>
  /**
   * Current location hash
   */
  hash: Ref<string>
}

interface PageData {
  title: string
  titleTemplate?: string | boolean
  description: string
  relativePath: string
  filePath: string,
  headers: Header[]
  frontmatter: Record<string, any>
  params?: Record<string, any>
  isNotFound?: boolean
  lastUpdated?: number
}

vue
<script setup>
import { useData } from 'vitepress'

const { theme } = useData()
</script>

<template>
  <h1>{{ theme.footer.copyright }}</h1>
</template>

`useRoute` コンポーザブル

次の型を持つ現在のルートオブジェクトを返します

ts
interface Route {
  path: string
  data: PageData
  component: Component | null
}

`useRouter` コンポーザブル

VitePress ルータインスタンスを返すため、プログラムで別のページに移動できます。

ts
interface Router {
  /**
   * Current route.
   */
  route: Route
  /**
   * Navigate to a new URL.
   */
  go: (to?: string) => Promise<void>
  /**
   * Called before the route changes. Return `false` to cancel the navigation.
   */
  onBeforeRouteChange?: (to: string) => Awaitable<void | boolean>
  /**
   * Called before the page component is loaded (after the history state is
   * updated). Return `false` to cancel the navigation.
   */
  onBeforePageLoad?: (to: string) => Awaitable<void | boolean>
  /**
   * Called after the route changes.
   */
  onAfterRouteChanged?: (to: string) => Awaitable<void>
}

`withBase` ヘルパー

  • **型**: `(path: string) => string`

設定された `base` を指定された URL パスに追加します。ベース URL も参照してください。

`<Content />` コンポーネント

`<Content />` コンポーネントは、レンダリングされた Markdown コンテンツを表示します。独自のテーマを作成する場合に便利です。

vue
<template>
  <h1>Custom Layout!</h1>
  <Content />
</template>

`<ClientOnly />` コンポーネント

`<ClientOnly />` コンポーネントは、クライアント側でのみスロットをレンダリングします。

VitePress アプリケーションは、静的ビルドの生成時に Node.js でサーバーレンダリングされるため、Vue の使用はユニバーサルコードの要件に準拠する必要があります。つまり、beforeMount または mounted フックでのみブラウザ / DOM API にアクセスするようにしてください。

SSR に対応していないコンポーネント(たとえば、カスタムディレクティブを含む)を使用またはデモしている場合は、`ClientOnly` コンポーネントでラップできます。

template
<ClientOnly>
  <NonSSRFriendlyComponent />
</ClientOnly>

`$frontmatter` テンプレートグローバル

Vue 式で現在のページの フロントマター データに直接アクセスします。

md
---
title: Hello
---

# {{ $frontmatter.title }}

`$params` テンプレートグローバル

Vue 式で現在のページの 動的ルートパラメータ に直接アクセスします。

md
- package name: {{ $params.pkg }}
- version: {{ $params.version }}

MIT ライセンスでリリースされています。