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) の詳細な説明

ブログ    

推薦する

CSS グリッドレイアウトの完全ガイド

Grid は 2 次元のグリッド レイアウト システムです。これを使用すると、本質的にはハック メソ...

Centos7でポートを開く方法

CentOS7 のデフォルトのファイアウォールは iptables ではなく、firewalle で...

HTML テーブル マークアップ チュートリアル (41): テーブル ヘッダーの幅と高さの属性 WIDTH、HEIGHT

デフォルトでは、ヘッダーの幅と高さはコンテンツに応じて自動的に調整されます。ヘッダーの幅と高さを手動...

MySQLを使用して列内の異なる値の数をカウントする例

序文この記事で実装されている要件は、実際には非常に一般的です。たとえば、ユーザーが登録したチャネルを...

TypeScript のマップされた型とより優れたリテラル型推論について説明します。

目次概要マップされた型を使用して Object.freeze() を構築するマッピングタイプの構文は...

Windows での MySQL 8.0.15 の詳細なインストールと使用のチュートリアル

この記事では、MySQL 8.0.15の詳細なインストールと使用方法のチュートリアルを参考までに紹介...

MySQL 5.7 クラスタ構成手順

目次1. サーバーAのmy.cnfファイルを変更する2. サーバーBのmy.cnfファイルを変更する...

MySQLにインデックスを追加しても効果がないいくつかの状況について簡単に説明します。

インデックスを追加すると、クエリの効率が向上します。インデックスを追加するということは、ドキュメント...

CentOS 7 環境でソースコードから MySQL 5.7 をインストールする方法

この記事では、CentOS 7 環境でソース コードから MySQL 5.7 をインストールする方法...

CentOSバージョンにDockerをインストールする際のエラーの解決方法

1. バージョン情報 # cat /etc/system-release CentOS Linux ...

MySQL バージョンは、2 つのタイムスタンプ型の値をサポートしていないバージョンよりも低いです。

MySQL エラー:エラー コード: 1293 テーブル定義が正しくありません。CURRENT_T...

CSS 3.0とビデオを組み合わせることでクリエイティブなオープニング効果を実現

CSS 3.0 とビデオを組み合わせて実現したクリエイティブなオープニングをご紹介します。効果は次の...

HTML+CSS+JSはナビゲーションバーのスクロールグラデーション効果を実現します

目次まず効果を見てみましょう:成し遂げる:要約:まず効果を見てみましょう: 成し遂げる: 1. ナビ...

HTMLタグの書き方でよくある間違い

注意を払う必要があります。HTML Police がコードを調べて、意味のないタグをすべて見つけ出す...

ランダムロールコールテーブルを実装するためのネイティブJavaScript

この記事では、JavaScriptのランダムロールコールテーブルの具体的なコードを参考までに紹介しま...