Vue3 ミックスインの使い方

Vue3 ミックスインの使い方

Vue 2 は、データ、メソッド、ウォッチ、計算、ライフサイクル フック関数などのオプションの API を使用します。

mixinvueコンポーネントで再利用可能な関数を配布するための非常に柔軟な方法を提供します。mixin mixinは、任意のコンポーネント オプションを含めることができます。コンポーネントがmixinオブジェクトを使用すると、 mixinオブジェクトのすべてのオプションがコンポーネント独自のオプションにミックスされます。

1. mixin の使い方は?

簡単に言えば、 mixinオブジェクトは、 data内のデータ、メソッド、計算プロパティ、ライフサイクル フック関数など、コンポーネントの一般的なオプションを抽出し、それらをコンポーネントに導入して、コンポーネント自体のオプションとマージできるようにします。

例1:

<スクリプト>

定数myMixin = {

 データ(){

  戻る {

   番号:520

  }

 },

 マウントされた(){

  console.log('mixin がマウントされました');

 }

}

エクスポートデフォルト{

  ミックスイン:[myMixin],

}

</スクリプト>

は以下と同等です:

<スクリプト>

エクスポートデフォルト{

 データ(){

  戻る {

   番号:520

  }

 },

 マウントされた(){

  console.log('mixin がマウントされました');

 }

}

</スクリプト>

これを行う利点は、複数のコンポーネントの共通オプションをミックスイン オブジェクトに抽出し、必要に応じて直接導入できることです。

2. ミックスイン使用時の注意

mixinに含まれるオプションは、コンポーネントにも含めることができます。 mixinに含まれるオプションのプロパティの一部が同じ場合はどうなるでしょうか? mixinとコンポーネントの両方に同じ名前のメソッドが存在する場合はどうすればよいでしょうか?または、両方にライフサイクルフック関数が含まれている場合、どちらが最初に実行され、どちらが後で実行されますか?次に、mixin を使用する際に注意すべき点について見ていきましょう。

2.1. ミックスイン オブジェクトを使用する場合、コンポーネントとミックスインに同じオプションが含まれている場合はどうすればよいですか?

例2 : mixinオブジェクトとインスタンスの両方にdataオプションが含まれており、その中に2つの異なる変数が含まれています。

<テンプレート>

 <div>

  {{qdr}} - {{name}} 

 </div>

</テンプレート>

<スクリプト>

定数myMixin = {

 データ(){

  戻る {

   名前:「フロントエンド大好き妹」

  }

 }

}

エクスポートデフォルト{

 ミックスイン:[myMixin],

 データ(){

  戻る {

   qdr: 「フロントエンド担当者」

  }

 }

}

</スクリプト>

実行すると、両方の変数が使用可能であり、 mixinオブジェクト内のdataインスタンスのdataオプションとマージされていることがわかります。 methodsおよびcomputedについても同様です。

前の例の 2 つの変数を同じ名前に変更するとどうなりますか?

2.2. 使用されているミックスイン オブジェクトのオプションとインスタンス内のオプションの属性が同じ場合はどうすればよいでしょうか?

例3 : data内に同じ変数名nameが存在する

<テンプレート>

 <div>

  {{名前}} 

 </div>

</テンプレート>

<スクリプト>

定数myMixin = {

 データ(){

  戻る {

   名前:「フロントエンド大好き妹」

  }

 }

}

エクスポートデフォルト{

 ミックスイン:[myMixin],

 データ(){

  戻る {

   名前: 「フロントエンド担当者」

  }

 }

}

</スクリプト>

実行結果: 名前の値は「Front-end Person」です。

属性値が同じ場合、近接原則が選択され、インスタンス内の値が最初に継承されるため、 mixinオブジェクトの属性はインスタンス内の属性によって上書きされます。

2.3. ミックスインオブジェクトはライフサイクルフック関数を追加することもできる

最初に実行されるのは、ミックスインとインスタンスのどちらでしょうか?

例4 : マウントを例に、ライフサイクルフック関数をミックスmounted mixin追加する

定数myMixin = {

 マウントされた(){

  console.log('mixin がマウントされました');

 }

}

エクスポートデフォルト{

 ミックスイン:[myMixin],

 マウントされた(){

  console.log('マウントされました');

 }

}

実行結果:

ライフサイクル関数は一緒に実行され、最初にmixin内の関数が実行され、次にインスタンス内の関数が実行されることが分かりました。

3. Mixinカスタム属性

$options現在のコンポーネント インスタンスのオプションを初期化するために使用されます。オプションにカスタムpropertyを含める必要がある場合に便利です。

つまり、 $optionsインスタンス内のmixinカスタム プロパティを呼び出すために使用されます。

例5 : カスタム属性の追加

定数myMixin = {

  カスタム:'カスタム属性'

 }

例での使用:



マウントされた(){

 コンソールにログ出力します。

}

インスタンスに同じ名前のカスタム プロパティも含まれている場合、優先順位はどのように処理されますか?優先順位を制御したい場合はどうすればよいでしょうか?

4. 合併戦略

optionMergeStrategiesオプションのマージ戦略では、 optionMergeStrategiesを使用して、 mixinカスタム属性がインスタンス内の属性と競合する場合のマージ ルール (つまり、どちらを最初に使用するか) を定義します。

利用規則:

app.config.optionMergeStrategies.propertyName=(mixinVal,appVal)=>{

  return appVal || mixinVal // どの属性値が最初に返されるかを決定します}

上記の例 5 に従って、インスタンスにcustom属性を追加し、実行して結果を表示します。

例6 : mixinとインスタンス属性の優先順位の検証

<スクリプト>

定数myMixin = {

  カスタム:'mixin カスタム',

}

エクスポートデフォルト{

  カスタム:'アプリカスタム',

  ミックスイン:[myMixin],

  マウントされた(){

    console.log(this.$options.custom); // 結果を印刷: app custom

  }

}

</スクリプト>

mixinオブジェクト内の属性値がインスタンス内の属性値によって上書きされていることがわかります。上記のoptionMergeStrategies属性を使用して、 customのマージ ルールを変更できます。

main.js ファイルにインポートします:

app.config.optionMergeStrategies.custom=(mixinVal,appVal)=>{

 mixinVal を返す || appVal

}

再度実行すると、印刷された結果がミックスインの属性値になることがわかります。

console.log(this.$options.custom); // 結果を出力: mixin custom

5. グローバル設定ミックスイン

プロジェクト内に特定のオプションを再利用するコンポーネントが複数ある場合は、 mixinオブジェクトをグローバルに使用できます。インスタンスは複数のmixinオブジェクトを導入することもできます。

構文は次のとおりです。

app.mixin([ {}, {}, {} ])

vue3 mixin の使い方に関するこの記事はこれで終わりです。vue3 mixin に関するその他のコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue の親コンポーネントと子コンポーネント間の通信の例 (props、$ref、$emit)
  • Vueでミックスインを使用する方法
  • Vue ミックスインの使い方の詳しい説明
  • Vue での Mixin と extends の使用に関する詳細なチュートリアル
  • vue3 の defineProps で ref responsiveness を使用すると失敗する理由の詳細な説明
  • Vue コンポーネント共通メソッド抽出ミックスイン実装
  • Vue 親子コンポーネントのミックスイン共有に関する注意事項
  • Vue のコンポーネント化の詳細な説明 (ref、props、mixin、プラグイン)
  • Vue の ref、props、mixin 属性

<<:  HTML メタビューポート属性の説明

>>:  高品質なウェブページのデザイン方法 高品質なウェブページ(画像とテキスト)のデザイン経験

推薦する

Vue でコンポーネントを一括インポート、登録、使用する方法

序文コンポーネントは、非常に頻繁に使用されるものです。多くの人は、コンポーネントを 1 つのファイル...

Linuxでバージョン情報を表示する方法

Linux でバージョン情報を表示する方法。ビット数、バージョン情報、CPU コア情報、CPU 固有...

HTML の基礎_一般的なタグ、共通タグ、表

パート 1 HTML <html> -- 開始タグ<ヘッド>ウェブページ上の...

完全バックアップとポイントインタイムバックアップにmysqldumpを使用する方法

Mysqldump は MySQL の論理バックアップに使用されます。高速ではありませんが、柔軟性が...

VMware マルチノード環境を構成する方法

このチュートリアルでは CentOS 7 64 ビットを使用します。各仮想マシンに 2GB のメモリ...

Vue で計算プロパティを使用する際の知識ポイントのまとめ

計算されたプロパティ場合によっては、テンプレートにロジックを詰め込みすぎると、テンプレートが重くなり...

Ajax は CORS レスポンス ヘッダーを設定してクロスドメインの問題を解決し、クロスドメインのケース スタディを実現します。

1. クロスドメインを実現するためにCORSレスポンスヘッダーを設定するクロスオリジンリソース共有...

CentOS プラットフォーム上で LAMP 環境を素早く構築する方法

この記事では、例を使用して、CentOS プラットフォーム上で LAMP 環境を迅速に構築する方法に...

Vue でカスタムパスのエイリアスを設定する方法

Vue でカスタム パス エイリアスを設定する方法日常の開発では、モジュールやコンポーネントをインポ...

NavicatでMySQLビッグデータをインポートする際のエラーの解決方法

Navicat がエクスポートしたデータはインポートできません。最後に、MySQLコマンドのインポー...

フレックスレイアウトは、上下固定、中間スライドのレイアウトモードを実現します。

この記事では、主に、上下固定と中スライドレイアウトを実現するためのフレックスレイアウトのレイアウト方...

VUEはFlappy Birdゲームのサンプルコードを実装します

Flappy Bird は、誰もがアプリでプレイしたことがある非常にシンプルな小さなゲームです。ここ...

Visual Studio Code + Reactをベースに開発環境を構築するプロセス

開発環境ウィンドウ開発ツール Visual Studio Codeノードのインストールとnpm Wi...

CSS3で実装された天気アイコンのアニメーション効果

成果を達成する 実装コードhtml <div class="wrapper"...

本をめくる効果を実現するネイティブJS

この記事では、ネイティブ JS で実装された本をめくる効果の図を紹介します。効果は次のとおりです。 ...