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

推薦する

docker --privileged=true パラメータの役割についての簡単な説明

バージョン 0.6 あたりで、Docker に privileged が導入されました。このパラメー...

MySQLはSQL文を使用してテーブル名を変更します

MySQL では、SQL ステートメント rename table を使用してテーブル名を変更できま...

Vueプロジェクトをパッケージ化してリリースする手順

目次1. 開発環境から本番環境への移行2. 統一されたリクエストパスを設定する3. パッケージ化コマ...

Gitlab-ci を使用してリモート マシンに継続的にデプロイする方法 (詳細なチュートリアル)

簡単に言うと、今日は Gitlab-CI を使用してリモート サーバーに自動的にデプロイする方法につ...

Python ベースの Linux システムにおける特定のプロセスのパフォーマンス監視の考え方の詳細な説明

インターネット上には Linux サーバーを監視するためのツール、コンポーネント、プログラムが多数あ...

Windows システムの MySQL が中国語を入力および表示できない問題の解決方法

ステップ 1: メモ帳を使用して、MySQL インストール ディレクトリの「my.ini」ファイルを...

VUEはトークンログイン認証を実装

この記事では、トークンログイン認証を実装するためのVUEの具体的なコードを例として紹介します。具体的...

CSS3+JS による虫眼鏡モードの完璧な実装の詳細説明

約 1 年前、私は「虫眼鏡効果を模倣するいくつかの方法の原理の分析」という記事を書きました。当時、自...

(MariaDB) MySQL のデータ型とストレージメカニズムの包括的な説明

1.1 データ型の概要データ型は、各フィールドに保存できるデータの種類、保存できるデータの量、保存で...

bash スクリプトで ssh/scp コマンドにパスワードを渡す方法の詳細な説明

SSHPASSをインストールする最新のオペレーティング システムでは、sshpass パッケージはデ...

IIS7 IIS8 http は自動的に HTTPS にジャンプします (ポート 80 はポート 443 にジャンプします)

IIS7 では、「URL REWRITE2」疑似静的モジュールがインストールされているかどうかを確...

.html、.htm、.shtml、.shtm の違いと関連性について簡単に説明します。

ご存知のとおり、私たちが毎日閲覧する Web ページ、Web サイト、または Web ページには独自...

MySQL ログイン警告問題の解決策

1. はじめにMySQL にログインすると、次のような警告が表示されることがよくあります。警告: コ...

MySQL テーブルパーティションの使用法と基本原理の詳細な説明

目次パーティションテーブルとはパーティションテーブルの適用シナリオパーティションテーブルの制限パーテ...

js と jQuery での Ajax の使用例の詳細

目次ネイティブJS GETリクエストの送信方法投稿リクエストの送信方法パラメータ付きのGETリクエス...