Skip to content

ランタイム API

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

ヘルパーメソッドは vitepress からグローバルインポートでき、主にカスタムテーマの Vue コンポーネントで使われます。Markdown ファイルは Vue の Single File Component にコンパイルされるため、.md ファイル内でも使用できます。

use* で始まるメソッドは Vue 3 Composition API の関数(Composable)で、setup() または <script setup> の中でのみ使用できます。

useData composable

ページ固有のデータを返します。戻り値の型は次のとおりです。

ts
interface VitePressData<T = any> {
  /**
   * サイト全体のメタデータ
   */
  site: Ref<SiteData<T>>
  /**
   * .vitepress/config.js の themeConfig
   */
  theme: Ref<T>
  /**
   * ページ単位のメタデータ
   */
  page: Ref<PageData>
  /**
   * ページのフロントマター
   */
  frontmatter: Ref<PageData['frontmatter']>
  /**
   * 動的ルートのパラメータ
   */
  params: Ref<PageData['params']>
  title: Ref<string>
  description: Ref<string>
  lang: Ref<string>
  isDark: Ref<boolean>
  dir: Ref<string>
  localeIndex: Ref<string>
  /**
   * 現在の 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 composable

現在のルートオブジェクトを返します。型は次のとおりです。

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

useRouter composable

VitePress のルーターインスタンスを返し、プログラムで別ページへ遷移できます。

ts
interface Router {
  /**
   * 現在のルート
   */
  route: Route
  /**
   * 新しい URL へ遷移
   */
  go: (to?: string) => Promise<void>
  /**
   * ルートが変わる前に呼ばれる。`false` を返すと遷移をキャンセル
   */
  onBeforeRouteChange?: (to: string) => Awaitable<void | boolean>
  /**
   * ページコンポーネントが読み込まれる前(履歴が更新された後)に呼ばれる。
   * `false` を返すと遷移をキャンセル
   */
  onBeforePageLoad?: (to: string) => Awaitable<void | boolean>
  /**
   * ページコンポーネントが読み込まれた後(更新前)に呼ばれる
   */
  onAfterPageLoad?: (to: string) => Awaitable<void>
  /**
   * ルートが変わった後に呼ばれる
   */
  onAfterRouteChange?: (to: string) => Awaitable<void>
}

withBase helper

  • : (path: string) => string

設定された base を指定の URL パスに付与します。Base URL も参照。

<Content /> component

レンダリング済みの Markdown コンテンツを表示します。[独自テーマの作成時](../guide/custom-theme) に便利です。

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

<ClientOnly /> component

スロット内容をクライアント側でのみレンダリングします。

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

SSR 非対応(例: カスタムディレクティブを含む)なコンポーネントを使用・デモする場合は、ClientOnly でラップできます。

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

$frontmatter template global

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

md
---
title: Hello
---

# {{ $frontmatter.title }}

$params template global

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

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

MIT ライセンスの下で公開されています。