Composeable を使用して Nuxt 3 の Pinia ストアを呼び出す方法を学習します。
P粉418351692
2023-08-26 09:34:11
<p>nuxt 3.4.0 アップデート以降、コンポーザブルで pinia ストアを使用できなくなりました。 </p>
<pre class="brush:php;toolbar:false;">//コンポーズ可能なサンプル
import { useAuthStore } から '~/store/auth-store';
const authStore = useAuthStore();
エクスポート関数 doSomethingWithStore() {
authStore.checkAuthUser を返します。
}</pre>
<p>次のエラーが表示されます</p>
<pre class="brush:php;toolbar:false;">getActivePinia がアクティブな Pinia なしで呼び出されました。pinia のインストールを忘れましたか? const pinia = createPinia() app.use(pinia) これは運用環境では失敗します。 </pre>
<p>スタックブリッツの例を表示する
https://stackblitz.com/edit/broken-pinia-store-in-composeables?file=composables/thisBreaks.js,nuxt.config.ts</p>
@pinia/nuxt モジュールを
リーリーnuxt.config.ts
に誤ってインストールしました。 Nuxt 3 では、buildModules
属性はもう存在しないため、代わりにmodules
を使用する必要があります (TypeScript エラーでわかります):2 番目のポイントは、結合関数内で
リーリーuseAuthStore
を呼び出す必要もあります。そうしないと、pinia が実際にロードされる前にストアをロードしようとします。これは、結合関数が使用されるときではなく、ファイルがインポートされるときに呼び出されます。この動作中の stackblitz
を参照してください。これは、先ほどのように関数の外で
const authStore = useAuthStore();
を宣言すると、アプリケーションの起動の初期段階で、Ponia インスタンスを初期化する前に Vue インスタンス内で正しく呼び出されるからです。これはうまくいきます:
リーリーPinia に電話をかけるのが安全な場所 (完全なリストではない可能性があります):
<スクリプト設定>
内部<テンプレート>
セクションのインラインdefineNuxtMiddleware
内部