Vueのプラグインの仕組みとインストールの詳細を深く理解する

Vueのプラグインの仕組みとインストールの詳細を深く理解する

序文:

Vue を使用する場合、多くの場合、カスタム プラグインをいくつか使用して記述し、 Vue.useを使用してそれらを導入します。したがって、プラグインを作成する場合、 install方法が重要になります。 Vue.jsプラグインは ` installメソッドを公開する必要があります。このメソッドの最初の引数は Vue コンストラクターであり、2 番目の引数はオプションのオプション オブジェクトです。これは Vue プラグインのVue公式仕様です。では、このinstall関数とは一体何なのか、 Vue内部処理にこの関数をどのように使用し、どのように呼び出されるのか。今日はソースコード レベルからわかりやすく説明します。

この記事を読むと、次のことが分かります。

  • install機能でできること
  • install内部的にどのように実装されていますか?
  • VuexVue-Routerプラグインはインストール中に具体的に何を行いますか?

さて、これ以上何も言わずに、始めましょう! ! !

1. Vuex&Vue-Routerでのインストール処理

ここに、皆さんに考えてほしい 2 つの質問があります。穴を掘るようなものです。以下で 1 つずつ答えていきます。

  • プロジェクト内で$router $store直接使用して値やいくつかのメソッドを取得できるのはなぜですか?
  • なぜこれら 2 つのプラグインは最初にVue.useを使用して導入されるのでしょうか?次にインスタンスを作成し、それを Vue インスタンスに渡します。

実際、両者の原理は同じです。ここでは例としてVue-Routerを使用します。まず、内部インストールの具体的な実装を見てみましょう。

クラスルーター{
    コンストラクタ(オプション) {
        ...
    }
}

Router.install = function(_Vue) {

    _Vue.mixin({
        作成前() {
            if (this.$options.router) {
                _Vue.prototype.$router = this.$options.router
            }
        }
    })

}

デフォルトルーターをエクスポートします。
  • _Vue.mixinグローバル ミックスインとは何ですか?これは、このメソッドをすべてのコンポーネントに混合することと同じです。
  • beforeCreateは何ですか?もちろん、これはcreateの前に実行される Vue のライフサイクルです。

この場合は、大胆な判断をしてみましょう。 Vue-Router実際には install 関数でグローバル ミックスインを使用し、 beforeCreateライフサイクルがトリガーされたときにthis.$options.routerを Vue プロトタイプにマウントします。これにより、 this.$routerを使用してrouterインスタンスを呼び出すことができます。 クラスメイト: ちょっと待って、やめて! ! !まさにシスター・リーらしいですね。しかし、 this.$options.routerとは何ですか。どこから来たのですか。

心配しないでください。最初の問題は解決したので、今度は 2 番目の穴を埋めましょう。

通常はVue-Routerを使用します。エントリファイルを定義する Vue インスタンスはおそらく次のようになります。

// ルーター/index.js
'vue-router' という形式で VueRouter をインポートします。
'vue' から Vue をインポートします。

Vue.use(VueRouter);

定数_router = [
    ...
]

定数 Router = new VueRouter(_router);

デフォルトルーターをエクスポートします。

// メイン.js
'vue' から Vue をインポートします。
'router' から router をインポートします。

新しいVue({
    ルーター、
    ...
}).$mount('#app');

最初の例を組み合わせて、まず分析してみましょう。

  • Vue.use() は主にプラグイン内のinstallメソッドを呼び出し、 Vueインスタンスをパラメーターとして渡します。
  • 上記ではthis.$options.routerが使用されており、 options通常、設定項目を表します。
  • main.jsでは、Routerインスタンスを構成項目としてVueインスタンスに渡します。

噛む! ! !要素が検出されましたので、大胆に推測してみましょう。 Vue-Router 、まずグローバル ミックスインuseVueルート インスタンス構成項目内のrouterインスタンスを取得し、適切なタイミングでマウントを実行します。そして、 new Vue()ルートインスタンスが作成されると、 routerインスタンスが注入され、その後、グローバルミックスイン内のライフサイクルがトリガーされます。このとき、ルートインスタンスの設定項目this.$optionsにはすでにrouterインスタンスが含まれており、ようやくマウント処理が完了します。 ! ! このコードのセクションだけでも、論理的に厳密であり、プログラミングのアイデアも非常に巧妙なので、専門家と呼ぶにふさわしいものです。兄弟たち、パブリックスクリーンに「インサイダー」という単語を入力してください、うーん。

2. Vueでのインストールの内部実装

よく使われるライブラリinstallの使い方を読んで、何か得られたものはあったでしょうか。ウォームアップの後は、ソース コードからinstallの内部実装を調べ始めることができます。

エクスポート関数 initUse (Vue: GlobalAPI) {
    // インスタンスにマウントされたuseメソッドを登録する Vue.use = function (plugin: Function | Object) {
        // 現在のプラグインの配列を初期化します const installedPlugins = (this._installedPlugins || (this._installedPlugins = []))
        // このプラグインがすでに登録されている場合は処理しません if (installedPlugins.indexOf(plugin) > -1) {

            これを返す

        }

        ...
        
        // ここがポイントです! ! !
        if (typeof plugin.install === 'function') {
        // install がプラグイン内の関数である場合、install メソッドを呼び出し、プラグインを指定して、いくつかのパラメータを plugin.install.apply(plugin, args) に渡します。

        } そうでない場合 (typeof plugin === 'function') {
        // プラグイン自体が関数である場合は、それをインストールメソッドとして扱い、プラグインを指し示し、一連のパラメータを plugin.apply(null, args) に渡します。

        }
        
        //プラグインをプラグイン配列に入れるinstalledPlugins.push(plugin)

        これを返す
    }
}

ソースコードのこの部分は非常に簡潔で、読みやすいです。つまり、使用時にプラグインの種類を判別し、プラグイン自体のinstallを実行します。実際、公式サイトの説明を詳しく説明すると、 Classプラグインにはインストール メソッドが公開されているはずです。

結論:

Vue のプラグインの仕組みについて、より深く理解できたでしょうか?実際、プラグインを開発するときに、 installを使用して他の多くのことを実行できます。 たとえば、 Vue-Router実際にはインストール時にRouter-viewRouter-linkのグローバル コンポーネントを登録します。

Vue のプラグインの仕組みとinstallについての詳しい解説はこれで終わりです。Vue のプラグインの仕組みとインストールについてのより詳しい解説は、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • vue npm install 指定されたバージョンをインストールする操作
  • vueカスタムコンポーネント(Vue.use()で使用)はインストールの使用法です
  • Vue の落とし穴 - プロジェクトに依存モジュールをインストールすると npm install がエラーを報告する
  • Vueのインストール方法の紹介

<<:  IDEA で mysql8.0.3 と mybatis-generator を使用する際に発生するバグ

>>:  MySQL ストアド プロシージャ (in、out、inout) の詳細な説明

推薦する

MySQLストレージ時間タイプの選択に関する問題の説明

MySQL では、datetime 型は通常、時間を保存するために使用されますが、現在では多くのシス...

データベース接続のURLの詳細な説明と概要

データベース接続のURLの詳細な説明と概要JDBC URL = プロトコル名 + サブプロトコル名 ...

HTML タグ dl dt dd 使用方法

基本構造:コードをコピーコードは次のとおりです。 <ダウンロード> <dt>...

Dockerは単一のイメージを使用して複数のポートにマッピングします

必要:公式サイトのリソースサーバーは確かに1つのインスタンスでは使えず、複数のインスタンスを一緒に使...

JS+Canvas が抽選ホイールを引く

この記事では、宝くじターンテーブルを描画するJS + Canvasの具体的なコードを参考までに共有し...

IEのクラッシュバグ

コードをコピーコードは次のとおりです。 <スタイル タイプ="text/css&qu...

「fsck」を使用して Linux のファイルシステムエラーを修正する方法

序文ファイル システムは、データの保存方法と復元方法を整理する役割を担います。 いずれにせよ、時間の...

MySQLの共通関数の概要

序文: MySQL データベースは、よく使用される集計関数、日付および文字列処理関数など、幅広い関数...

Linuxはバイナリモードを使用してmysqlをインストールします

この記事では、LinuxにバイナリモードでMySQLをインストールする具体的な手順を参考までに紹介し...

Vue ミックスインの使い方の詳しい説明

目次Vue ミックスインの使用ミックスインでのデータアクセスミックスイン/index.jsホーム.v...

HTMLフォームのいくつかの送信方法の概要

最も一般的で、最もよく使用され、最も一般的な方法は、submit タイプを使用することです。コードを...

フレックスレイアウトを使用してページレイアウトを簡単に実装するためのサンプルコード

では、早速コードを見てみましょう。 1. 上部、中央、下部のレイアウト: <!DOCTYPE ...

Vue はアップロードした画像に透かしを追加できるようになりました (アップグレード版)

vueプロジェクトでは、アップロードした画像に透かしを追加して参照できるようにするアップグレード版...

MySQL データ型の詳細

目次1. 数値型1.1 数値型の分類1.1.1 浮動小数点数1.1.2 ビットタイプ1.1.3 時間...

Docker データ ストレージ ボリュームの詳細な説明

デフォルトでは、コンテナ データの読み取りと書き込みはコンテナのストレージ レイヤーで行われます。コ...