Vue3 setup() の高度な使用例の詳細な説明

Vue3 setup() の高度な使用例の詳細な説明

この記事には役立つ情報がたくさんあるので、保存しておくことをお勧めします!

vue2 から vue3 にアップグレードすると、vue3 は vue2 と互換性があるため、vue3 は vue2 のオプション API を採用できます。オプション API の変数は複数の場所に存在するため、問題が発生した場合には複数の関数で確認する必要があります。プロジェクトが大きい場合、問題が発生するとトラブルシューティングの難易度が高くなります。そのため、vue3 では、結合された API を記述するために使用される新しいセットアップ構成項目が追加されました。

1. オプションAPIと組み合わせAPIの違い

学生の中には、気づかないうちに 1 年間 Vue を使っていたにもかかわらず、オプションの API すら知らない人もいます。あなたはあのクラスメイトですか?もしそうなら、すぐに集めてください。

vue2 のオプション API はオプションの API で、中国語と英語の 2 種類があり、好きな名前を付けることができます。

vue ファイルには、ページ ロジックを一緒に処理するためのプロパティとメソッドを定義するために使用されるデータ、メソッド、マウント、計算、ウォッチなどがあります。このメソッドを Options API と呼びます。

例1: カウンター

<テンプレート>
 <div>
  <button @click="add">+</button>
   {{数値}}
  <button @click="reduce">-</button>
 </div>
</テンプレート>
<スクリプト>
エクスポートデフォルト{
 データ(){
  戻る {
   番号:0
  }
 },
 方法:{
  追加(){
   this.num++
  },
  減らす(){
   this.num--
  }
 }
}
</スクリプト>

上記の例を見ると、数値の処理にはデータとメソッドの 2 つのオプションが含まれていることがわかります。ビジネス処理は比較的分散しています。プロジェクトが小さい場合は明確に見えますが、プロジェクトが大きくなると、データとメソッドには多くの属性とメソッドが含まれます。このとき、どの属性がどのメソッドに対応しているかを区別するのは困難です。そのため、vue3 では、結合された API を記述するための新しいセットアップが追加されています。

Vue3 の Composition API は組み合わせ API です。

結合 API とは、関数で定義されているすべての API をまとめたものです。これにより、プロジェクトが大きくなり、機能が増えても、その機能に関連するすべての API をすぐに見つけることができます。Options API とは異なり、機能が分散しているため、変更が必要な場合、複数の場所での検索プロセスが困難です。

例2: カウンター

<テンプレート>
 <div>
  <button @click="add">+</button>
   {{数値}}
  <button @click="reduce">-</button>
 </div>
</テンプレート>
<スクリプト>
 'vue' から { ref } をインポートします
 エクスポートデフォルト{
  設定(){
   定数num = ref(1)
   戻る {
    番号、
    追加(){
     数値++
    },
    減らす(){
     数値--
   }
  }
 }
}
</スクリプト>

Ref は基本的なデータ型をレスポンシブにします。次の記事ではその使い方を詳しく紹介します。必要な場合は、これに従ってください。迷うことはありません!

それらの違いを説明する写真がこちらです:

2. セットアップの使い方は?

2.1. セットアップはいつ実行されますか?

setup は、結合された API を記述するために使用されます。ライフサイクル フック関数の観点からは、beforeCreate を置き換えることと同等です。作成される前に実行されます。

<スクリプト>
 エクスポートデフォルト{
  作成された(){
   console.log('作成されました');
  },
  設定(){
   console.log('セットアップ');
  }
 }
</スクリプト>

実行後、セットアップ印刷結果が常に先頭に表示されます。

2.2. セットアップデータとメソッドの使用方法

例3: 変数を直接定義して使用する

<テンプレート>
 {{a}}
</テンプレート>
<スクリプト>
 エクスポートデフォルト{
  設定(){
   定数a = 0
  }
 }
</スクリプト>

実行後、結果は異常です:

runtime-core.esm-bundler.js?5c40:6584 [Vue 警告]: レンダリング中にプロパティ "a" にアクセスされましたが、インスタンスでは定義されていません。

アクセスした属性 a がインスタンスにマウントされていないというメッセージが表示されます。

セットアップ内のプロパティとメソッドは、プロパティをインスタンスにマウントできるように return によって公開される必要があります。そうしないと、プロパティは使用できません。上記のコードでは return が追加されています。

<スクリプト>
 エクスポートデフォルト{
  設定(){
   定数a = 0
   戻る {
    1つの
   }
  }
 }
</スクリプト>

2.3. 内部設定はありますか?

これをセットアップで印刷すると、結果は未定義になります。これはセットアップ内に存在しないことを意味し、これに関連するものはマウントできません。

2.4. セットアップでフック関数を使用するにはどうすればいいですか?

Vue3 は Vue2 のオプションベースの記述スタイルと互換性があるため、フック関数はセットアップと並行して存在することができ、これは Options API と同等です。

例4:

エクスポートデフォルト{
 設定(){
  console.log('セットアップ');
 },
 マウントされた(){
  console.log('マウントされました');
 }
}

vue3 で追加された setup() 関数は、結合された API を記述するために使用されるため、この方法でコードを記述することは推奨されません。したがって、フック関数を登録するには、onXXX ファミリの関数を使用する必要があります。登録が成功すると、呼び出されたときにコールバック関数が渡されます。

例5:

"vue" から onMounted をインポートします。
エクスポートデフォルト{
 設定(){
  定数a = 0
  戻る {
   1つの
  },
  マウント時(()=>{
   console.log("実行");
 })
 }
}

これらの登録されたライフサイクル フック関数は、現在のコンポーネント インスタンスを見つけるためにグローバルな内部状態に依存しているため、セットアップ中に同期的にのみ使用できます。また、関数が現在のコンポーネントで呼び出されない場合はエラーがスローされます。

他のフック関数は同じなので、必要に応じて導入してください。

2.5. セットアップ関数とフック関数の関係

セットアップがフック関数と並行してリストされている場合、セットアップはライフサイクル関連の関数を呼び出すことはできませんが、ライフサイクルはセットアップ関連のプロパティとメソッドを呼び出すことができます。

例6:

<テンプレート>
 <button @click="log">クリックしてください</button>
</テンプレート>
<スクリプト>
エクスポートデフォルト{
 設定(){
  定数a = 0
  戻る {
   1つの
  }
 },
 方法:{
  ログ(){
   console.log( this.$options.setup() ); // オブジェクトを返します }
 }
}
</スクリプト>

this.$options.setup() は、セットアップ内のすべてのプロパティとメソッドを含む大きなオブジェクトを返します。

3. 設定パラメータ

セットアップを使用すると、props と context という 2 つのパラメータを受け取ります。

3.1. 小道具

最初のパラメータは props です。これは、親コンポーネントが子コンポーネントに値を渡すことを意味します。props はレスポンシブであり、新しい props が渡されると自動的に更新されます。

例7:

エクスポートデフォルト{
 小道具: {
  メッセージ: 文字列、
  回答: 文字列、
 },
 セットアップ(プロパティ、コンテキスト){
  console.log(props); //Proxy {msg: "緊急にパートナーを探しています", ans: "パートナーはいますか?"}
 },
}

props はレスポンシブなので、ES6 のデストラクチャリングは使用できず、props のレスポンシブ性が失われます。この場合、toRefs のデストラクチャリングが必要です。例8:

「vue」から {toRefs} をインポートします。
 エクスポートデフォルト{
  小道具: {
   メッセージ: 文字列、
   回答: 文字列、
  },
  セットアップ(プロパティ、コンテキスト){
   コンソールにログ出力します。
   const { msg, ans } = toRefs(props)
   console.log(msg.value); // パートナーを心待ちにしています console.log(ans.value); // パートナーはいますか?
  },
 }

コンポーネントを使用する際、オプションのパラメータに遭遇することがよくあります。値を渡す必要がある場合もあれば、そうでない場合もあります。どのように対処しますか?

ans がオプションのパラメータである場合、渡されたプロパティに ans が存在しない可能性があります。この場合、toRefs は ans の参照を作成しないので、代わりに toRef を使用する必要があります。

「vue」から {toRef} をインポートします。
セットアップ(プロパティ、コンテキスト){
 let ans = toRef(props ,'ans') // 存在しない場合はansを作成する
 console.log(ans.値);
}

3.2、コンテキスト

コンテキスト コンテキスト環境には、属性、スロット、カスタム イベントの 3 つの部分が含まれます。

セットアップ(プロパティ、コンテキスト){
 const { attrs, slots, emitting } = コンテキスト
 // attrsはコンポーネントから渡された属性値を取得します。
 // スロット コンポーネント内のスロット // カスタム イベント サブコンポーネントを発行します}

attrs は、主に no-props 属性を受け取り、いくつかのスタイル属性を渡すためによく使用される非応答オブジェクトです。

slots はプロキシ オブジェクトであり、slots.default() は、コンポーネントのスロットによって長さが決定され、スロットの内容が含まれる配列を取得します。

これはセットアップには存在しないため、emit は以前の this.$emit を置き換えるために使用され、子から親に渡されるときにカスタム イベントをトリガーするために使用されます。

例9:

<テンプレート>
 <div:style="attrs.style"> は、
  <スロット></スロット>  
  <スロット名="hh"></スロット>
  <button @click="emit('getVal','Pass value')">子が親に値を渡す</button> 
 </div> 
</テンプレート>
<スクリプト>
「vue」から { toRefs,toRef } をインポートします。
エクスポートデフォルト{
 セットアップ(プロパティ、コンテキスト){
  const { attrs, slots, emitting } = コンテキスト
  // attrs はコンポーネントから渡されたスタイル属性を取得します console.log('slots', slots.default()); // スロット配列 console.log('slot attribute', slots.default()[1].props); // スロットの属性を取得します return {
  属性、
  放出する
   }
  },
 }
</スクリプト>

4. セットアップ機能の概要

1. この関数は、上で説明したように、作成前に実行されます。

2. 内部にこの設定がないので、これに関連するものは搭載できません。

3. セットアップ内のプロパティとメソッドは返され公開される必要があります。そうでない場合、使用できません。

4. セットアップ内のデータが応答しません。

5. セットアップはライフサイクル関連の関数を呼び出すことはできませんが、ライフサイクル関数はセットアップ内の関数を呼び出すことができます。

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

以下もご興味があるかもしれません:
  • Vue3 アップデートのセットアップ構文シュガー例の詳細な説明
  • Vue3 - セットアップスクリプトの使用経験の共有
  • フロントエンド vue3 セットアップチュートリアル
  • vue3 でのセットアップ スクリプトの適用例
  • Vue3 ベースのスクリプト設定構文 $refs の使用
  • 強くお勧めします! Vue 3.2 でシンタックスシュガーを設定する
  • setup+ref+reactive は vue3 の応答性を実装します
  • vue3のセットアップ関数の使用について

<<:  リモートDockerを使用した統合テスト環境の構築手順

>>:  CSS でハニカム/六角形アトラスを実装するためのサンプルコード

推薦する

Vue Element フロントエンドアプリケーション開発のための従来の JS 処理機能

目次1. 従来のコレクションに対するフィルター、マップ、および削減処理方法2. 再帰処理3. for...

HTML の META タグの使用に関するヒントの例

HTML メタタグHTML メタタグは、Web ページのコンテンツに関する情報をブラウザや検索エンジ...

Vue で手ぶれ補正とスロットリングを使用する方法

目次序文コンセプト安定意味使用シナリオコードVueでの使用スロットリング意味使用シナリオコードVue...

CSSのマッチング問題を解決する

問題の説明ご存知のとおり、CSS を記述する場合、HTML のクラスの定義または ID の定義に従っ...

Vueはタブナビゲーションバーを実装し、左右のスライド機能をサポートしています

この記事では主に、Vue を使用してタブ ナビゲーション バーを実装し、flex レイアウトを使用し...

MYSQLは継続サインイン機能を実装しており、サインイン後1日経過すると最初から開始します(SQL文)

1. テストテーブルを作成する テーブル `testsign` を作成します ( `userid`...

時間を節約できる Linux コマンド エイリアス 15 個

序文Linux システムの管理と保守のプロセスでは、多数のコマンドが使用されます。非常に長いコマンド...

JavaScript ES6 モジュールの詳細な説明

目次0. モジュールとは何か1.モジュールの読み込み1.1 方法1 1.2 方法2 2. 輸出と輸入...

Vueは複数のカウントダウンを同時に設定する機能を実装しています

この記事の例では、複数のカウントダウンを同時に設定するためのVueの具体的なコードを参考までに共有し...

Idea で Docker を使用して SpringBoot プロジェクトをデプロイする詳細な手順

序文プロジェクト要件: Dockeridea に Docker プラグインをインストールし、Dock...

Nginx を使用して IP アドレスが悪意を持って解決されるのを防ぐ方法

Nginxを使用する目的Alibaba Cloud ECS クラウド サーバーを使用して、まずは著者...

Docker データ管理 (データ ボリュームとデータ ボリューム コンテナー) の詳細な説明

実稼働環境で Docker を使用する場合、多くの場合、データを複数のコンテナ間で永続化または共有す...

MySQLデータベースについて学びましょう

目次1. データベースとは何ですか? 2. データベースの分類は? 3. データベースとデータ構造の...

mysql5.7.18.zip インストール不要版設定チュートリアル(Windows)

これは私が以前使用した mysql5.7.18.zip のインストール チュートリアルです。まずこれ...

Linux サーバーでフォルダー、ファイル、解凍コマンドを削除する方法

1. フォルダを削除する例: rm -rf /usr/java /usr/javaディレクトリとその...