ホームページ > ウェブフロントエンド > jsチュートリアル > Nuxt アプリケーションで `navigator`、`window`、および `document` が定義されていないのはなぜですか?

Nuxt アプリケーションで `navigator`、`window`、および `document` が定義されていないのはなぜですか?

Susan Sarandon
リリース: 2024-11-10 22:46:02
オリジナル
1008 人が閲覧しました

Why are `navigator`, `window`, and `document` undefined in my Nuxt application?

Nuxt アプリケーションで未定義のナビゲーター / ウィンドウ / ドキュメントに対処する方法

はじめに

Nuxt アプリケーションがナビゲーター、ウィンドウ、ドキュメントなどのグローバル ブラウザー変数にアクセスすると、未定義のエラーが発生する場合があります。これは、Nuxt フレームワークがサーバーサイド レンダリング (SSR) を利用しており、コードがクライアントでレンダリングされる前に最初にサーバーで実行されるためです。

ソリューション

この問題を解決する鍵は、ブラウザ依存のコードをクライアント側に制限することです。これを達成するには、いくつかの戦略があります。

1.条件付きコードのラッピング

コードを if (process.client) 条件内でラップして、クライアント側でのみ実行します。これにより、コードは SSR フェーズの後にのみ実行されることが保証されます。

<script>
  export default {
    mounted() {
      if (process.client) {
        // Your JS code here
      }
    },
  }
</script>
ログイン後にコピー

2. コンポーネント

を作成します。コンポーネントを使用して、クライアント上でのみレンダリングされる要素をラップします。これにより、SSR 中に実行されなくなります。

<template>
  <div>
    <client-only>
      <p>This will only be rendered on client</p>
    </client-only>
  </div>
</template>
ログイン後にコピー

3.動的インポート

ライブラリが SSR をサポートしていない場合は、動的インポートを使用できます。これにより、クライアント側で必要になるまでライブラリの読み込みが遅延され、SSR 中にライブラリが実行されないようになります。

export default {
  components: {
    [process.client &&& 'VueEditor']: () => import('vue2-editor'),
  },
}
ログイン後にコピー

注:

  • ラッピングコンポーネントは にあります。実行ではなくレンダリングをスキップします。
  • 一部のパッケージは、SSR で適切に動作するために追加の構成が必要な場合があります。

以上がNuxt アプリケーションで `navigator`、`window`、および `document` が定義されていないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート