Vue のライフサイクルとフック関数の詳細な説明と典型的な面接の質問

Vue のライフサイクルとフック関数の詳細な説明と典型的な面接の質問

1. Vue ライフサイクル

コンポーネントの作成から破棄までのプロセス全体がライフサイクルです。

Vue インスタンスの作成から破棄までのプロセスがライフサイクルです。つまり、作成からデータの初期化、テンプレートのコンパイル、Dom のマウント→レンダリング、更新→レンダリング、アンインストールなどの一連の処理を Vue のライフサイクルと呼びます。

2. フック機能

Vueフレームワークには、コンポーネントのライフサイクル フェーズの進行に応じて特定の時間に自動的に実行され、特定の操作を実行する組み込み関数があります。

2.1 4つの段階と8つの方法に分かれています。

ステージメソッド名メソッド名
初期化作成前作成された
マウントマウント前マウント
更新する更新前更新されました
破壊する破棄前破壊された

次の図はインスタンスのライフサイクルを示しています。

2.2 初期化フェーズ

1.new Vue() – Vue のインスタンス化 (コンポーネントも小さな Vue インスタンスです)

2. 初期化イベントとライフサイクル – 初期化イベントとライフサイクル関数

3.beforeCreate – ライフサイクルフック関数が実行される

4.Initインジェクションとリアクティブ – Vue内にデータとメソッドを追加する

5.created – ライフサイクルフック関数が実行され、インスタンスが作成される

6. 次はテンプレートコンパイルフェーズです – 分析を開始します

7.エルオプションはありますか? – エルオプションはありますか? – どこに掛けるか確認してください

いいえ。$mount() メソッドを呼び出します。

はい、テンプレートオプションの確認を続けます

<スクリプト>
エクスポートデフォルト{
    データ(){
        戻る {
            メッセージ: 「こんにちは、Vue」
        }
    },
    // 1. 初期化 // new Vue() の後、vue はインスタンス オブジェクトにいくつかのプロパティとメソッドを追加します。データとメソッドは「前」に初期化されます。
    作成前(){
        console.log("beforeCreate -- 実行");
        console.log(this.msg); // 未定義
    },
    // データとメソッドが初期化された後 // シナリオ: ネットワーク要求、グローバルイベントを登録 created(){
        console.log("作成 -- 実行されました");
        console.log(this.msg); // こんにちは、Vue
 
        this.timer = setInterval(() => {
            console.log("ハハハ");
        }, 1000)
    }
}
</スクリプト>

2.3 マウントフェーズ

1. テンプレートオプションのチェック

はい - テンプレートをコンパイルし、レンダリング関数を返します

なし – el オプションに対応するタグをテンプレートとしてコンパイルします (レンダリングするテンプレート)

2. 仮想DOMが実際のDOMとしてマウントされる前

3. beforeMount – ライフサイクルフック関数が実行される

4.作成… – 仮想DOMとレンダリングされたデータを実際のDOMにアタッチします

5. 実際のDOMがマウントされる

6.mounted – ライフサイクルフック関数が実行される

<テンプレート>
  <div>
      <p>学習ライフサイクル - コンソール印刷を参照</p>
      <p id="myP">{{ メッセージ }}</p>
  </div>
</テンプレート>
 
<スクリプト>
エクスポートデフォルト{
    // ...他のコードは省略// 2. マウント// 実際の DOM マウントの前// シナリオ: データを前処理し、更新されたフック関数をトリガーしません beforeMount(){
        console.log("beforeMount -- 実行");
        console.log(document.getElementById("myP")); // null
 
        this.msg = "再評価"
    },
    // 実際のDOMがマウントされた後 // シナリオ: マウント後の実際のDOM
    マウントされた(){
        console.log("マウントされました -- 実行されました");
        console.log(document.getElementById("myP")); // p
    }
}
</スクリプト>

2.4 更新フェーズ

1. データ内のデータが変更された場合、DOMを更新する前に

2.beforeUpdate – ライフサイクルフック関数が実行される

3. 仮想DOM… – 仮想DOMの再レンダリング、実際のDOMへのパッチ適用

4.更新 – ライフサイクルフック関数が実行される

5. データが変更されたらサイクルを繰り返す

<テンプレート>
  <div>
      <p>学習ライフサイクル - コンソール印刷を参照</p>
      <p id="myP">{{ メッセージ }}</p>
      <ul id="myUL">
          <li v-for="(val, index) in arr" :key="index">
              {{ val }}
          </li>
      </ul>
      <button @click="arr.push(1000)">値を追加するには最後をクリックします</button>
  </div>
</テンプレート>
 
<スクリプト>
エクスポートデフォルト{
    データ(){
        戻る {
            メッセージ: 「こんにちは、Vue」
            編曲: [5, 8, 2, 1]
        }
    },
  
    // 3. 更新 // 前提条件: データが変更されたときのみ実行 // 更新前 beforeUpdate(){
        console.log("beforeUpdate -- 実行");
        console.log(document.querySelectorAll("#myUL>li")[4]); // 未定義
    },
    // 更新後 // シナリオ: 更新された実際のDOMを取得する
    更新されました(){
        console.log("更新されました -- 実行されました");
        console.log(document.querySelectorAll("#myUL>li")[4]); // li
    }
}
</スクリプト>

2.5 破壊フェーズ

1. $destroy() が呼び出されると、たとえばコンポーネントの DOM が削除されます (例: v-if)

2. beforeDestroy – ライフサイクルフック関数が実行される

3. データモニター、サブコンポーネント、イベントリスナーを分解する

4. インスタンスが破棄された後、フック関数が最終的にトリガーされます

5.destroyed – ライフサイクルフック関数が実行される

<スクリプト>
エクスポートデフォルト{
    // ...その他のコードは省略// 4. 破棄// 前提条件: v-if="false" Vue インスタンスを破棄// シナリオ: グローバル イベントの削除、現在のコンポーネントの削除、タイマー、イベント バスの削除イベント $off メソッド beforeDestroy(){
        // console.log('beforeDestroy -- 実行されました');
        クリア間隔(this.timer)
    },
    破壊された()
        // console.log("破棄されました -- 実行されました");
    }
}
</スクリプト>

やっと:

インタビューの質問:

1.Vue ライフサイクルはいくつのステージで構成されていますか?

(1) 作成前

インスタンスの初期化後、データ オブザーバーとイベント/ウォッチャーの構成の前に呼び出されます。

(2)作成された

インスタンスが作成された直後に呼び出されます。このステップでは、インスタンスはデータ オブザーバー、プロパティとメソッドの操作、およびウォッチ/イベント コールバックの構成を完了しています。ただし、マウント フェーズはまだ開始されておらず、$el プロパティは現在表示されません。

(3)マウント前

マウント開始前に呼び出されます。関連するレンダリング関数が初めて呼び出されます。

(4)マウント

el は新しく作成された vm.$el に置き換えられ、インスタンスにマウントされた後にフックが呼び出されます。ルート インスタンスがドキュメント内要素をマウントする場合、mounted が呼び出されると vm.$el もドキュメント内になります。

(5) 更新前

仮想 DOM にパッチが適用される前に、データが更新されたときに呼び出されます。これは、追加されたイベント リスナーを手動で削除するなど、更新する前に既存の DOM にアクセスする場合に便利です。サーバー側レンダリング中は、最初のレンダリングのみがサーバー上で行われるため、このフックは呼び出されません。

(6)更新

このフックは、データの変更により仮想 DOM が再レンダリングされ、パッチが適用された後に呼び出されます。

(7)活性化

キープアライブ コンポーネントがアクティブ化されたときに呼び出されます。このフックはサーバー側のレンダリング中には呼び出されません。

(8)無効化

キープアライブ コンポーネントが非アクティブ化されたときに呼び出されます。このフックはサーバー側のレンダリング中には呼び出されません。

(9)破壊する前に

インスタンスが破棄される前に呼び出されます。この段階では、インスタンスはまだ完全に使用可能です。このフックはサーバー側のレンダリング中には呼び出されません。

(10)破壊された

Vue インスタンスが破棄された後に呼び出されます。呼び出し後、Vue インスタンスによって指し示されるすべてのものがバインド解除され、すべてのイベント リスナーが削除され、すべての子インスタンスが破棄されます。このフックはサーバー側のレンダリング中には呼び出されません。

(11) errorCaptured (2.5.0 以降で新機能)

子孫コンポーネントからエラーがキャッチされたときに呼び出されます。このフックは、エラー オブジェクト、エラーが発生したコンポーネント インスタンス、およびエラーの発生場所に関する情報を含む文字列の 3 つのパラメータを受け取ります。このフックは false を返すことで、エラーがさらに上方に伝播するのを防ぐことができます。

2. ページが初めて読み込まれたときにどのフック関数がトリガーされますか?

beforeCreate、created、beforeMount、mounted などのフック関数

要約する

Vue ライフサイクルとフック関数に関するこの記事はこれで終わりです。Vue ライフサイクルとフック関数に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue命令のフック関数の使い方
  • VUEマウントフック関数の実行時にimgが読み込まれず、ページレイアウトが崩れる問題を解決
  • Vueの各種オプションとフック関数の実行順序の詳細な説明
  • vue ボタンの @click メソッドが無効で、フック関数が実行されません

<<:  複数の Docker コンテナが同じポート番号を持たない場合の解決策

>>:  すべてのブラウザに対応したデータURIとMHTMLの完全なソリューション

推薦する

HTMLの基本概念の詳細な説明

HTMLとは何ですか? HTML は Web ページを記述するために使用される言語です。 •HTML...

docker-compose を使用して Apollo カスタム環境をデプロイする詳細なチュートリアル

目次アポロ コンフィギュレーション センターとは何ですか?アポロの特徴クライアントアーキテクチャアー...

Vue2.x - アンチシェイクとスロットリングの使用例

目次ユーティリティ: vue での使用:説明する:画像安定化:スロットル:ユーティリティ: // 手...

MySQLのバージョンアップ方法を超詳しく解説

目次1. はじめに2. データベースをバックアップする3. オリジナルのMysqlをアンインストール...

nginx proxy_cache キャッシュ設定の詳細な説明

序文:私は仕事柄、オンラインライブストリーミングの分野に携わっており、ビデオの再生やダウンロードには...

CSS におけるスタックコンテキストの具体的な使用法

序文一部の CSS 相互作用の影響により、要素に設定されたz-index実際のサイズに応じて重ね合わ...

W3Cチュートリアル(16):その他のW3Cの活動

このセクションでは、その他の重要かつ興味深い W3C アクティビティの概要を説明します。このセクショ...

JS関数の継承について学ぶ記事

目次1. はじめに: 2. プロトタイプチェーン継承: 3. コンストラクタ継承の借用(オブジェクト...

Dockerイメージ作成の完全なプロセス

目次序文作成手順CentOSベースイメージを作成するコンテナを作成してカスタマイズするカスタムコンテ...

Vue で手ぶれ補正とスロットリングを使用する方法

目次序文コンセプト安定意味使用シナリオコードVueでの使用スロットリング意味使用シナリオコードVue...

Vueスロットの詳細な説明

1. 機能: 親コンポーネントが子コンポーネントの指定された位置に HTML 構造を挿入できるように...

WeChatアプレットが検索ボックス機能を実装

この記事の例では、WeChatアプレットの検索ボックス機能を実装するための具体的なコードを参考までに...

MySQLトランザクションを実行するための構文とプロセスの詳細な説明

概要: MySQL は、トランザクションをサポートするためにさまざまなストレージ エンジンを提供しま...

Linux カーネル デバイス ドライバー 高度な文字デバイス ドライバーのメモ

/****************** * 高度な文字デバイス ドライバー ***********...

MySQL インデックスの原理と使用例の分析

この記事では、例を使用して MySQL インデックスの原理と使用方法を説明します。ご参考までに、詳細...