ホームページ  >  に質問  >  本文

Composeable を使用して Nuxt 3 の Pinia ストアを呼び出す方法を学習します。

<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>
P粉418351692P粉418351692419日前687

全員に返信(2)返信します

  • P粉186897465

    P粉1868974652023-08-27 08:07:09

    @pinia/nuxt モジュールを nuxt.config.ts に誤ってインストールしました。 Nuxt 3 では、buildModules 属性はもう存在しないため、代わりに modules を使用する必要があります (TypeScript エラーでわかります):

    リーリー

    2 番目のポイントは、結合関数内で useAuthStore を呼び出す必要もあります。そうしないと、pinia が実際にロードされる前にストアをロードしようとします。これは、結合関数が使用されるときではなく、ファイルがインポートされるときに呼び出されます。

    リーリー

    この動作中の stackblitz

    を参照してください。

    返事
    0
  • P粉378264633

    P粉3782646332023-08-27 00:19:28

    これは、先ほどのように関数の外で const authStore = useAuthStore(); を宣言すると、アプリケーションの起動の初期段階で、Ponia インスタンスを初期化する前に Vue インスタンス内で正しく呼び出されるからです。

    これはうまくいきます:

    リーリー

    Pinia に電話をかけるのが安全な場所 ​​(完全なリストではない可能性があります):

    • 内部<スクリプト設定>内部
    • <テンプレート>セクションのインライン
    • defineNuxtMiddleware内部

    返事
    0
  • キャンセル返事