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

推薦する

React でのポータルとエラー境界処理の実装

目次ポータルエラー境界処理エラー境界を使用しない場合はどうなりますか?注記ポータルスロットとも言えま...

nginx 503 サービスが一時的に利用できない問題を解決する方法

最近、ウェブサイトを更新すると、503 Service Temporarily Unavailabl...

ab ツールを使用してサーバー上で API ストレス テストを実行します。

目次1 システムスループットの簡単な紹介2 試験方法2.1 クライアントテストツール2.1.1 GE...

MySQL Community Server 圧縮パッケージのインストールと設定方法

今日は、MySQL をインストールしたかったので、公式 Web サイトにアクセスして、MySQL の...

JavaScriptの知識ポイントの詳しい説明

目次1. JavaScriptの基礎2. 基本的なJavaScript構文3. JavaScript...

CentOS7.6 システムで yum を使用して lnmp 環境を構成する方法

1. インストールバージョンの詳細 サーバー: MariaDB サーバーバージョン: 5.5.60-...

Centos7.9 で独立したメール サーバーを構築するための詳細な手順

目次序文1. イントラネットDNS AレコードとMXレコードを構成する2. メールサーバの初期化設定...

Bootstrap 3.0 の特殊効果の学習ノート(表示と非表示、フローティングの除去、閉じるボタンなど)

この記事の主な内容は次のとおりです。 1. 閉じるボタン2.キャレット3. フローティングを素早く設...

mysql エラー 1045 (28000) - ユーザーへのアクセスが拒否される問題を解決する方法

問題の説明 (以下の説明は Windows 環境に限定されます): D:\develop\ide\m...

Linuxの基本コマンドmktempの詳しい説明

mptemp は安全な方法で一時ファイルまたはディレクトリを作成します。このコマンドの適用範囲: R...

MySQL では UTF-8 が推奨されないのはなぜですか?

最近、Rails 経由で「utf8」でエンコードされた UTF-8 文字列を MariaDB に保存...

Vuex はシンプルなショッピングカート機能を実装します

この記事の例では、ショッピングカート機能を実装するためのvuexの具体的なコードを参考までに共有して...

入力ファイルの制御と美化について

一部のWebサイトでアップロードする場合、「参照」ボタンをクリックすると、[ファイルの選択]ダイアロ...

Docker で ElasticSearch をデプロイする方法

1. ElasticSearch とは何ですか? Elasticsearch も Java で開発さ...

XHTML と CSS の Web ページ作成の問題に対する解決策

XHTML CSS ページ制作中に遭遇する問題の解決策は、解決策と呼ぶには少々大げさです。せいぜい、...