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の完全なソリューション

推薦する

MySQLの起動失敗の解決策

MySQLの起動失敗の解決策MySQLを起動できませんmysqlを停止した後、いくつかの操作(ホスト...

LinuxにNginxをインストールする詳細な手順

1. Nginxのインストール手順1.1 公式サイトの紹介http://nginx.org/en/d...

ネストされた HTML ページの使用例 (フレームセットの使用)

コードをコピーコードは次のとおりです。 <!DOCTYPE html PUBLIC "...

MySQLのあいまいクエリインデックスの失敗の問題を解決するいくつかの方法

% ワイルドカードを使用すると、インデックス失敗の問題が発生することがよくあります。ここでは、lik...

sed コマンドを使用してファイルの特定の行を効率的に削除する方法

序文通常、ファイル内の特定の行を削除したい場合は、まずファイルを開き、削除する内容を見つけて、これら...

Dockerイメージの階層化の原理の詳細な説明

ベースイメージベースイメージには 2 つの意味があります。他のイメージに依存せず、ゼロから構築します...

nginxコンテナ設定ファイルの独立した実装

コンテナを作成する [root@server1 ~]# docker run -it --name ...

Vue印刷機能を実装する2つの方法の概要

方法1: npm経由でプラグインをインストールする1. npm install vue-print-...

el-select のスタイルを変更する方法の詳細な説明: popper-append-to-body と popper-class

elementUI が提供する el-select コンポーネントのスタイルを変更する方法この問題...

MySQL データベースの Binlog 使用法の概要 (必読)

MySQL データベースにとって binlog バイナリ ログがどれほど重要であるかについては詳し...

HTML割引価格計算の実装原理とスクリプトコード

コードをコピーコードは次のとおりです。 <!DOCTYPE HTML PUBLIC "...

MYSQL メタデータ ロック (MDL ロック) の理論とロック タイプ テスト

目次MYSQL メタデータ ロック (MDL ロック) 学習理論とロック タイプ テスト1. 予備的...

Vue3でelement-plusを使用する方法の詳細な説明

目次1. インストール2. main.jsにインポートする3. 使用Vue3がリリースされてからしば...

vuex データの永続化のための 2 つの実装ソリューション

目次ビジネス要件:解決策 1: vuex-persistedstate解決策2: vuex-pers...

虫眼鏡コンポーネントのネイティブ js 実装

この記事の例では、参考までに虫眼鏡コンポーネントを開発するためのjsの具体的なコードを共有しています...