Nuxt 3.15 で追加された callOnce のナビゲーションモードについて

callOnceとはどんな composable なのか、そして追加されたナビゲーションモードはどんなモードなのかをまとめる。

callOnce

SSR もしくは CSR で処理を一度だけ実行することができる composable です。

Nuxt v3.9 から使えるようになりました。

ユースケースとしては、state の初期化を行う場合などです。

State Management · Get Started with Nuxt
Nuxt provides powerful state management libraries and the useState composable to create a reactive and SSR-friendly shared state.
State Management · Get Started with Nuxt favicon https://nuxt.com/docs/getting-started/state-management#initializing-state
State Management · Get Started with Nuxt

ナビゲーションモード

Nuxt 3.15 で新たに追加された機能です。

Nuxt 3.15 · Nuxt Blog
Nuxt 3.15 is out - with Vite 6, better HMR and faster performance
Nuxt 3.15 · Nuxt Blog favicon https://nuxt.com/blog/v3-15#️-navigation-mode-for-callonce
Nuxt 3.15 · Nuxt Blog

公式サイトにも記載がありますが、下記のように { mode: 'navigation' } を指定することでナビゲーションモードを有効にすることができます。

await callOnce(() => counter.value++, { mode: 'navigation' })

middleware と callOnce のナビゲーションモードの違いについて

ページ遷移の度に実行することができるという説明を聞くと、middleware と役割が似ているように感じます。

大きな違いとして、処理が実行されるタイミングが異なります。

middleware で定義される処理はナビゲーションの前に実行されます。

そのため、middleware には、ログイン状態のチェックや閲覧権限のチェック等の処理を定義するのが向いています。

逆に callOnce のナビゲーションモードはナビゲーションのタイミングで実行されるため、タイミングとしては middleware よりも後に実行されます。

そのため、callOnce には、状態等のデータの初期化等の処理を定義するのが向いています。