brand logo

ドキュメント

clearNuxtData

useAsyncData と useFetch のキャッシュデータ、エラーステータス、および保留中のプロミスを削除します。

このメソッドは、別のページのデータフェッチを無効にしたい場合に便利です。

clearNuxtData (keys?: string | string[] | ((key: string) => boolean)): void

パラメータ

  • keys: キャッシュされたデータを削除するために useAsyncData で使用されるキーまたはキーの配列。キーが指定されていない場合、すべてのデータが無効になります。

tips

このセクションは公式ドキュメントの翻訳ではなく、本サイト独自の補足記事です。

clearNuxtDataとは?〜データキャッシュ管理の強力な味方〜

NuxtのuseAsyncDatauseFetchは、サーバーサイドレンダリング(SSR)やクライアントサイドレンダリング(CSR)でのデータ取得を効率化し、キャッシュを活用してパフォーマンスを向上させます。しかし、状況によってはキャッシュされたデータを手動でクリアしたいケースがあります。そんなときに役立つのがclearNuxtDataです。

この関数は、キャッシュされたデータやエラーステータス、保留中のプロミスを指定したキー単位、または全体で削除できるため、動的なデータ更新や状態管理の柔軟性を高めます。特に複雑なページ遷移やユーザー操作に応じて最新データを反映したい場合に重宝します。


まず結論:clearNuxtDataのポイント

  • clearNuxtDatauseAsyncDatauseFetchのキャッシュを手動で削除できる
  • 引数にキー(文字列または配列)を指定すると特定のデータだけをクリア可能
  • 引数なしで呼ぶと全てのキャッシュデータを一括削除する
  • キャッシュ削除後は再度データフェッチが走るため、最新データを取得できる
  • SSR/CSR両方の環境で動作し、Hydrationの整合性にも配慮されている
  • 過剰なクリアはパフォーマンス低下の原因になるため注意が必要

いつ使うべき?使わない方がよいケースは?

使うべきケース

  • ユーザー操作でデータをリフレッシュしたいとき
    例:フィルター条件の変更やページ内の動的更新で最新情報を取得したい場合

  • ページ遷移後に前ページのキャッシュを残したくないとき
    例えば、同じコンポーネントを使い回すがデータは毎回新規取得したい場合

  • APIのレスポンスが頻繁に変わるためキャッシュが古くなる恐れがあるとき

  • エラー状態をリセットして再試行を促したいとき

使わない方がよいケース

  • 頻繁に呼びすぎてパフォーマンスに悪影響が出る場合
    キャッシュをクリアすると再フェッチが発生するため、無駄な通信が増える

  • キャッシュの恩恵を最大限活かしたい静的なデータ取得時

  • 単純な状態管理やUI制御だけで済む場合
    例えば、ローカルな状態変更だけならVueのリアクティブ機能で十分


実務でよくあるユースケースとサンプルコード

1. フィルター条件変更時にデータをリフレッシュ

ユーザーが検索条件を変えたとき、キャッシュをクリアして最新のAPI結果を取得します。

import { ref } from 'vue'
import { useAsyncData, clearNuxtData } from '#app'

const filter = ref('all')

const { data, refresh } = useAsyncData('items', () =>
  fetch(`/api/items?filter=${filter.value}`).then(res => res.json())
)

function onFilterChange(newFilter: string) {
  filter.value = newFilter
  clearNuxtData('items') // キャッシュをクリア
  refresh() // 再フェッチ
}

2. ページ遷移後に前ページのキャッシュを削除

同じコンポーネントを使い回すが、ページごとにデータを新規取得したい場合。

import { onBeforeRouteUpdate } from 'vue-router'
import { clearNuxtData } from '#app'

onBeforeRouteUpdate(() => {
  clearNuxtData() // 全キャッシュをクリアしてから新データ取得
})

3. エラー発生時に状態をリセットして再試行

APIエラーが発生した場合、エラー状態をクリアして再度データ取得を試みる。

const { error, refresh } = useAsyncData('profile', fetchProfile)

function retry() {
  clearNuxtData('profile')
  refresh()
}

よくある落とし穴・注意点

SSRとCSRの違いによる影響

clearNuxtDataはクライアント側でキャッシュをクリアしますが、SSRで生成されたHTMLには影響しません。したがって、Hydration時にサーバーとクライアントの状態差異が起きないよう注意が必要です。特に初期レンダリング直後にクリアを多用すると、UIのちらつきや不整合が発生することがあります。

パフォーマンスへの影響

キャッシュをクリアすると再度APIコールが発生するため、頻繁に呼び出すと通信量やレスポンス遅延が増加します。必要なタイミングでのみ使い、無駄なクリアは避けましょう。

キー指定の正確さ

キーを指定する場合は、useAsyncDatauseFetchで使ったキーと完全に一致させる必要があります。誤ったキーを指定するとキャッシュが削除されず、意図した動作にならないことがあります。

保留中のプロミスもクリアされる

clearNuxtDataは保留中の非同期処理もキャンセル扱いになるため、処理の途中でクリアすると予期せぬ副作用が起こる可能性があります。特に複雑な非同期処理が絡む場合は慎重に使いましょう。


まとめ

clearNuxtDataはNuxtのデータフェッチキャッシュを柔軟に管理できる強力なAPIです。ユーザー操作に応じたデータのリフレッシュや、ページ遷移時のキャッシュクリアなど、実務での活用シーンは多岐にわたります。一方で、SSR/CSRの挙動差異やパフォーマンスへの影響を理解し、適切なタイミングで使うことが重要です。

正しく使えば、ユーザー体験の向上と効率的なデータ管理を両立できるため、Nuxt開発者にとって必須の知識と言えるでしょう。