Vue における Vue.use() の原理と基本的な使用法

Vue における Vue.use() の原理と基本的な使用法

序文

他の人のコンポーネントを Vue で使用する場合、多くの人が Vue.use() を使用すると思います。例: Vue.use(VueRouter)、Vue.use(MintUI)。しかし、axios を使用する場合は、Vue.use(axios) を使用する必要はなく、直接使用できます。それで、なぜでしょうか?
axiosがインストールされていないためです。

1. 例で理解する

新しいプロジェクトに plugins.js と use.js の 2 つのファイルを作成します。

// プラグイン.js
定数プラグイン1 = {
  インストール(a,b){
    console.log('Plugin1 の最初のパラメータ:',a)
    console.log('プラグイン1の2番目のパラメータ:',b)
  }
}

関数Plugin2(a,b){
  console.log('Plugin2 の最初のパラメータ:',a)
  console.log('プラグイン2の2番目のパラメータ:',b)
}

エクスポート{プラグイン1,プラグイン2}
// 使用.js 
'vue' から Vue をインポートします
'./plugins' から {Plugin1,Plugin2} をインポートします。

Vue.use(プラグイン1、'パラメータ1')
Vue.use(プラグイン2、'パラメータA')
// メイン.js
'vue' から Vue をインポートします
'./App.vue' からアプリをインポートします。
'./router' からルーターをインポートします
'./assets/plugins/use' をインポートします

Vue.config.productionTip = false
新しいVue({
  ルーター、
  店、
  レンダリング: h => h(App)
}).$mount('#app')

このことから、plugin1 の install メソッドに記述した 2 つのコンソールが出力されていることがわかります。最初のコンソールは Vue オブジェクトを出力し、2 番目のコンソールは渡したパラメーターです。

Plugin2 には install メソッドがありません。それ自体がメソッドであり、2 つのパラメータを出力することもできます。1 つ目は Vue オブジェクトで、2 つ目は渡したパラメータです。
これで、Vue.use について漠然とした推測ができました。

2. ソースコードを分析する

toArray ソースコード

エクスポート関数 toArray (リスト: 任意、開始?: 数値): Array<任意> {
  開始 = 開始 || 0
  i = list.length - 開始とする
  const ret: Array<any> = 新しいArray(i)
  (i--) {
    ret[i] = リスト[i + 開始]
  }
  リターン ret
}
'../util/index' から { toArray } をインポートします

エクスポート関数 initUse (Vue: GlobalAPI) {
  Vue.use = function (プラグイン: Function | Object) {
    const インストール済みプラグイン = (this._installedPlugins || (this._installedPlugins = []))
    インストールされたプラグインのインデックスが -1 より大きい場合
      これを返す
    }

    // 追加パラメータ
    const args = toArray(引数、1)
    args.unshift(これ)
    if (typeof plugin.install === 'function') {
      plugin.install.apply(プラグイン、引数)
    } そうでない場合 (typeof plugin === 'function') {
      プラグインを適用(null, 引数)
    }
    インストールされたプラグインをプッシュします
    これを返す
  }
}

ソースコードから、Vue はまずプラグインが登録されているかどうかを判断し、繰り返しの登録を許可せず、受信したプラグインパラメータは Function | Object タイプに制限されていることがわかります。

これら 2 つのタイプには異なる治療法があります。

まず、渡したパラメータを配列に整理します: const args = toArray(arguments, 1);

次に、配列args.unshift(this)の先頭に Vue オブジェクトを追加します。ここで、 this は Vue オブジェクトを指します。

渡すプラグインのインストール (Vue.use の最初のパラメータ) がメソッドである場合。つまり、インストール メソッドを含むオブジェクトを渡す場合は、このプラグインのインストール メソッドを呼び出し、ソートされた配列をインストール メソッドのパラメーターとして渡しますplugin.install.apply(plugin, args);

渡すプラグインが関数である場合は、関数を直接呼び出し、ソートされた配列をパラメーターとして渡します (plugin.apply(null, args);)。

次に、このプラグインを追加されたプラグインの配列に追加し、登録されたことを示しますinstalledPlugins.push(plugin);
最後に、Vue オブジェクトを返します。

3. まとめ

上記の分析を通じて、将来プラグインを作成する方法は 2 つあることがわかります。

1 つは、このプラグインのロジックをオブジェクトにカプセル化し、最後にインストール時にビジネス コードを記述して、それを Vue オブジェクトに公開することです。これを実行する利点は、このオブジェクトに任意のパラメータを追加して、インストール機能をより簡潔かつ拡張可能にできることです。

もう 1 つの方法は、すべてのロジックを関数に記述し、それを Vue に公開することです。

実際、2 つの方法の原理は同じですが、2 番目の方法ではプラグインがインストール関数として直接扱われる点が異なります。

個人的には、最初の方法の方が合理的だと思います。

エクスポートconstプラグイン = {
    インストール(Vue) {
        Vue.コンポーネント...
        Vue.mixins...
        ヴュー...
        // インストール時に他の関数を実行することもできます。Vue はこれをプラグインにポイントします。console.log(this) // {install: ...,utils: ...}
        this.utils(Vue) // utils関数を実行 console.log(this.COUNT) // 0
    },
    ユーティリティ(Vue) {
        ヴュー...
        コンソールログ(Vue) // Vue
    },
    カウント: 0    
}
// このオブジェクトにパラメータを追加することができ、Vue はインストール メソッドのみを実行し、他のメソッドはインストール メソッドをカプセル化するための補助関数として使用できます。const test = 'test'
エクスポート関数Plugin2(Vue) {
    ヴュー...
    console.log(テスト) // 'テスト'
    // プラグインが関数として記述されている場合、Vue は this を null にのみポイントし、この関数にはポイントしないことに注意してください console.log(this) // null
}
// この方法では、プラグインのロジックを1つの関数にしか記述できず、カプセル化はそれほど強力ではありません

要約する

これで、Vue における Vue.use() の原理と基本的な使用法に関するこの記事は終了です。Vue の Vue.use() の原理と使用法に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • vueカスタムコンポーネント(Vue.use()で使用)はインストールの使用法です
  • ソースコードから使用方法まで、vue.use() メソッドについて簡単に説明します。
  • Vue の新しいおもちゃ VueUse の具体的な使い方
  • Vue.use() の使い方とインストール

<<:  MySQL 8.0.22 のダウンロード、インストール、設定方法のグラフィックチュートリアル

>>:  Postman に基づく HTTP インターフェース テスト プロセスの分析

推薦する

Vue.jsでタブ切り替えと色変更操作を実装する解説

この機能を実装するにあたり、本家ブロガーさんから拝借した方法では色の切り替えが実現できず、長い間考え...

ウェブページエクスペリエンス: 計画と設計

1. デザインの方向性を明確にする<br />まず、どのユーザーを対象にデザインするのか...

macOS SierraにApache2.4+PHP7.0+MySQL5.7.16をインストールする

Mac システムには PHP と Apache が付属していますが、必要なバージョンではない場合があ...

CSSがページのレンダリングをブロックするかどうかについての簡単な説明

おそらく誰もが js の実行によって DOM ツリーの解析とレンダリングがブロックされることを知って...

MySQLデータベースパラダイムの詳細な説明

序文:データベースパラダイムについてはよく耳にしていましたが、詳細まで理解したことはありませんでした...

Jenkins初心者のためのDockerデプロイメントチュートリアルの詳細な説明

この記事では、docker 経由で Jenkins+Maven+SVN+Tomcat をデプロイし、...

Angular環境構築と簡単な体験のまとめ

Angular入門Angular は、Google が開発したオープンソースの Web フロントエン...

MySQLログに関する知識のまとめ

目次SQL実行順序ビンログ何ですかいつ生産されるのか何の役に立つんだディスクはいつドロップされますか...

MYSQL フルバックアップ、マスタースレーブレプリケーション、カスケードレプリケーション、および半同期の概要

MySQL フルバックアップ1. バイナリログを有効にし、データベースから分離して別々に保存する v...

Reactプロジェクトで要素を使用する方法

React プロジェクトで要素フレームワークを使用するのは今回が初めてです。非常に単純な問題に遭遇し...

formData 形式タイプを使用してファイルをアップロードする Vue の例

Vue では、一般的にフロントエンドとバックエンドを分離したプロジェクトがあり、データ操作を実装する...

スライドによるページめくり効果とクリックイベント問題をモバイル端末上で実装する

前述のこの記事はとても短いです〜主な目的は、モバイル端末上のクリックと js イベントのメカニズムに...

知っておくべき JS 配列削減の高度な使い方 25 選

序文Reduce は ES5 で追加された新しい従来の配列メソッドの 1 つです。forEach、f...

JavaScript 戦略パターンを使用してフォームを検証する方法

目次概要戦略パターンを使用しないフォーム検証戦略パターンを使用して最適化する戦略パターンの利点要約す...

Webpackを使用して複数ページのプログラムを構築するための実装手順

webpack を使用してシングルページのプログラムを構築することは非常に一般的ですが、実際の開発で...