Vue のミックスインの使用方法の詳細な説明

Vue のミックスインの使用方法の詳細な説明

序文

プロジェクトが大きくなるにつれて、コンポーネント間に類似した機能が多くあることに気付くでしょう。同じコード スニペット (データ、メソッド、ウォッチ、マウントなど) を何度もコピーして貼り付けます。各コンポーネントでこれらのプロパティとメソッドの定義を繰り返すと、プロジェクトでコードが冗長になり、メンテナンスの難易度が増します。このような状況に備えて、公式の Mixins 機能が提供されています。

1. Mixin とは何ですか?

ミックスインは、公式の説明によると、Vue コンポーネントで再利用可能な機能を配布する非常に柔軟な方法です。ミックスインは、データ、コンポーネント、メソッド、作成、計算など、コンポーネントのスクリプト項目に任意の機能オプションを含めることができる js オブジェクトです。共通関数をオブジェクトとして mixins オプションに渡すだけです。コンポーネントが mixins オブジェクトを使用すると、mixins オブジェクトのすべてのオプションがコンポーネント自体のオプションにミックスされます。これにより、コードの再利用性が向上し、コードがクリーンで保守しやすくなります。

2. Mixin はいつ使用すればよいですか?

複数のコンポーネントに類似したデータや関数がある場合、ミックスインを使用して共通部分を抽出できます。ミックスインによってカプセル化された関数を通じて、それらを呼び出すコンポーネントは関数の外部スコープを変更しません。

3. Mixin を作成するには?

src ディレクトリに mixins フォルダーを作成し、そのフォルダー内に myMixins.js ファイルを作成します。前に述べたように、mixinsはjsオブジェクトなので、myMixinsはオブジェクトの形式で定義する必要があります。オブジェクトでは、データ、コンポーネント、メソッド、作成済み、計算済み、その他のプロパティをvueコンポーネントと同じように定義し、エクスポートを通じてオブジェクトをエクスポートできます。

4. Mixin の使い方は?

呼び出す必要があるコンポーネントに myMixins.js ファイルをインポートし、必要なオブジェクトをエクスポート デフォルトにインポートします。

5. ミックスインの特徴

[5.1] メソッドとパラメータはコンポーネント間で共有されません。コンポーネントはミックスインを呼び出し、そのプロパティを自身のコンポーネントにマージしますが、そのプロパティは現在のコンポーネントによってのみ認識され、共有されません。つまり、他のコンポーネントは現在のコンポーネントからミックスインのデータとメソッドを取得できません。

①まず、混合オブジェクトmyMixins.jsにageフィールドとgetAgeメソッドを定義します。

エクスポートconst myMixins = {
コンポーネント:{},
データ() {
戻る {
年齢: 18歳
}
},
マウント() {
年齢を取得する()
},
メソッド: {
年齢を取得する() {
コンソールログ(this.age)
}
}
}

② コンポーネント1でnumに+1演算を実行する

"@/mixins/myMixins.js" から { myMixins } をインポートします。
エクスポートデフォルト{
ミックスイン: [myMixins],
データ() {
戻る {}
},
作成された() {
this.age++
},
}

③コンポーネント2が動作しない

エクスポートデフォルト{
ミックスイン: [myMixins],
データ() {
戻る {}
},
}

④コンソール出力を表示するために、それぞれ2つのページに切り替えます。コンポーネント 1 によって age の値が変更され、コンポーネント 2 の age 値は混合オブジェクトの初期値のままであり、コンポーネント 1 の追加によって変更されていないことがわかります。

[5.2] ミックスインを導入すると、コンポーネントはそれらをマージし、ミックスイン内のデータとメソッドを現在のコンポーネントに拡張します。マージプロセス中に競合が発生する可能性があります。次に、ミックスインのマージ競合について詳しく説明します。

6. ミックスインのマージ競合

[6.1] 値がオブジェクト(コンポーネント、メソッド、計算、データ)であるオプションは、コンポーネントに混合されるとマージされます。キーが競合する場合は、コンポーネントが優先され、コンポーネント内のキーが混合オブジェクトのキーを上書きします。

①混合オブジェクトにage属性、getAge1メソッド、getAge2メソッドを追加します。

// マイミックスイン.js
エクスポートconst myMixins = {
コンポーネント:{},
データ() {
戻る {
年齢: 18歳
}
},
メソッド: {
getAge1() {
console.log("mixins からの age1 =", this.age )
},
getAge2() {
console.log("mixins からの age2 =", this.age )
},
}
}

②myMixinsファイルを導入したコンポーネントに、age属性、getAge1メソッド、getAge3メソッドを追加しました

// テンプレート.vue
"@/mixins/myMixins.js" から { myMixins } をインポートします。
エクスポートデフォルト{
ミックスイン: [myMixins],
データ() {
戻る {
年齢: 20,
}
},
マウント() {
年齢1を取得します。
年齢2を取得します。
年齢3を取得します。
},
メソッド: {
getAge1() {
console.log('テンプレートからのage1 =', this.age)
},
getAge3() {
console.log('テンプレートからのage3 =', this.age)
},
}
}

③ コンポーネントのageが混合オブジェクトのageをオーバーライドし、コンポーネントのgetAge1メソッドが混合オブジェクトのgetAge1メソッドをオーバーライドしていることがわかります。

[6.2] 値が関数(作成、マウント)であるオプションは、コンポーネントに混合されたときにマージされて呼び出されます。混合オブジェクト内のフック関数は、コンポーネント内のフック関数の前に呼び出されます。

7. vuexとの違い

vuex: 状態管理に使用されます。ここで定義された変数は、各コンポーネントで使用および変更できます。いずれかのコンポーネントでこの変数の値が変更されると、他のコンポーネントのこの変数の値もそれに応じて変更されます。

ミックスイン: 共有変数を定義して、各コンポーネントで使用できます。コンポーネントに導入された後、各変数は互いに独立しており、値の変更はコンポーネント内で互いに影響しません。

8. パブリックコンポーネントとの違い

コンポーネント: 親コンポーネントにコンポーネントを導入することは、子コンポーネントが使用するための独立したスペースを親コンポーネント内に与え、props に従って値を渡すことと同じですが、本質的には 2 つは比較的独立しています。

ミックスイン: コンポーネントが導入された後、コンポーネント内のオブジェクトとメソッドとマージされます。これは、親コンポーネントのオブジェクトとメソッドを拡張することと同じです。新しいコンポーネントを形成すると理解できます。

Vue のミックスインの使い方を詳しく説明したこの記事はこれで終わりです。Vue のミックスインに関するより詳しい内容については、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue の親子コンポーネント、値の転送、スロット適用テクニックに関するメモ
  • Vue でのミックスインの使用法の詳細な説明
  • Vue のミックスインについての理解についてお話しします
  • Vue 親子コンポーネントのミックスイン共有に関する注意事項

<<:  MySQL におけるさまざまな一般的な結合テーブルクエリの例の概要

>>:  Ubuntu 20.04 をインストールした後に行うべきこと (初心者向けガイド)

推薦する

クロスブラウザの問題に対する 5 つの解決策 (要約)

簡単なレビュー: ブラウザの互換性の問題は、しばしば頭痛の種となります。ここでは、これらの問題を回避...

Vue でのカスタムディレクティブの基本的な使用方法

目次序文文章1. グローバル登録2. 部分登録3. フック機能とパラメータ設定4. 柔軟な使い方(1...

ウェブサイトのコンテンツの100~1%はナビゲーションである

ウェブサイトでは、コンテンツの(100-1)%がナビゲーションです1. ジェシー・ジェームズ・ギャレ...

ページ内にマーキーとフラッシュが共存する場合の競合解決

競合の主な症状は、FLASH ボタンがジャンプし続け、不安定になり、Web ページの外観と通常のアク...

CentOS7 に MySQL をオフラインでインストールする詳細なチュートリアル

1. 元のmariadbを削除します。削除しないとmysqlをインストールできません。 mariad...

CSS クロスブラウザ スタイルのバグのデバッグについて

まず最初に、適切なブラウザを選択します。私が Chrome を選択したのは、その強力なデバッグ ツー...

CentOS7.x のアンインストールとインストール MySQL5.7 の操作手順とエンコード形式の変更方法

1. MySQL 5.7 のアンインストール1.1查看yum是否安裝過mysql CD yum li...

Vue+echarts でプログレスバーのヒストグラムを実現

この記事では、プログレスバーヒストグラムを実現するためのvue+echartsの具体的なコードを参考...

10 HTML テーブル関連タグ

実際、多くの人が「テーブルは絶対に使用すべきではないと聞いたことがある」と言いますが、これは絶対に間...

Nginx を使用してフロントエンドのクロスドメイン問題を解決する方法

序文Vue アプリケーションなどの静的ページを開発する場合、クロスドメインになる可能性のあるインター...

Linuxカーネルをコンパイルする方法

1. 必要なカーネルバージョンをダウンロードする2. オペレーティングシステムにアップロードする3....

CSS 境界線の半分または部分的に表示される実装コード

1. 疑似クラスを使用して境界線の半分を表示する <!DOCTYPE html> <...

JS ES6 非同期ソリューション

目次最初にコールバック関数を使用するes6 非同期処理モデルこの非同期モデルに合わせたAPI: pr...

MySQL のインデックスにおける NULL の影響についての詳細な説明

序文私は多くのブログを読み、弊社の DBA を含む多くの人々が、MySql では列に null が含...