Vue3 における親コンポーネントと子コンポーネント間の値の転送の詳細な説明

Vue3 における親コンポーネントと子コンポーネント間の値の転送の詳細な説明

vue3 が誕生してからかなり時間が経ち、筆者も最近になって vue3 を学び始めました。 vue2 と比較すると、vue3 は記述面で大きな変更が加えられています。最も典型的な例は、vue3 が ref または reactive を通じてデータ応答性を実装していることです。 ref と reactive の登場により、Vue3 では親コンポーネントと子コンポーネント間で値を渡す方法も変更されました。

まずvue2でどのように書くかを見てみましょう

親コンポーネント:

<!-- 親コンポーネント -->
<テンプレート>
  <div>
    <children :title="タイトル" @getChildren="getChildren"></children>
    <div>子コンポーネントは次のように言います: {{ childrenAsk }}</div>
  </div>
</テンプレート>
 
<スクリプト>
  「./children.vue」から子要素をインポートします。
  エクスポートデフォルト{
    データ() {
      戻る {
        タイトル: 「私は親コンポーネントから渡された値です」
        子供たちに質問: ""
      }
    },
    メソッド: {
      getChildren(val) {
        this.childrenAsk = val
      }
    }
  }
</スクリプト>

サブコンポーネント:

<!-- 子コンポーネント -->
<テンプレート>
  <div>
    <div>親コンポーネントから渡された値: {{ title }}</div>
    <button @click="askToFather">クリックすると親コンポーネントに送信されます</button>
  </div>
</テンプレート>
<スクリプト>
  エクスポートデフォルト{
    小道具: {
      タイトル:
        タイプ: 文字列
      }
    },
    データ() {
      戻る {
        askMsg: 「これは親コンポーネントに言ったことです」
      }
    },
    メソッド: {
      父親に尋ねる() {
        this.$emit("getChildren", this.askMsg)
      }
    }
  }
</スクリプト>

vue2 では、子コンポーネントから親コンポーネントへの値の転送は this.$emit を通じて実装されていますが、vue3 ではこれが存在しません。vue3 では、データと関数の両方が setup にカプセル化されていますが、vue3 はどのように実装しているのでしょうか?

vue3 の setup は 2 つのパラメータを受け取ることがわかっています。最初のパラメータは props で、親コンポーネントから子コンポーネントに渡される props 値です。2 番目の値は context で、現在のコンテキスト オブジェクトを表します。これがわかったので、vue3 の親子コンポーネント値の転送を実装できます。

Vue3 の親子継承は、Vue2 の親子継承と同じです。ここでは詳しく説明しません。以下では、Vue3 の子親継承に焦点を当てます。

親コンポーネント

<テンプレート>
  <div style="color: aqua">親コンポーネント</div>
  <div>子コンポーネントは次のように言います: {{ children_msg }}</div>
  <children :title="メッセージ" @listen="子供の話を聞きます"></children>
  {{ 価値 }}
</テンプレート>
<script lang="ts">
「@/views/component_emit/children.vue」から子要素をインポートします。
「vue」から{defineComponent、ref}をインポートします。
エクスポートデフォルトdefineComponent({
  コンポーネント:
    子供たち、
  },
  名前:「父」、
  設定() {
    let msg = "私は親コンポーネントです"
    let children_msg = ref("") // ref の機能は応答性を実装することです。ref がなければ応答性を実装できません (参照データ型は reactive を使用します)
    listenToChildren = (val) => { とします。
      children_msg.value = val // ref でラップされたデータを使用するには、.value の形式でその値にアクセスする必要があります}
    戻る {
      メッセージ、
      子供のメッセージ、
      listenToChildren、
    }
  },
})
</スクリプト>
<スタイル></スタイル>

サブコンポーネント:

<テンプレート>
  <div style="color: brown">サブコンポーネント</div>
  <!-- 親子の伝達方法はvue2と同じです-->
  <div>親コンポーネントから渡される値は: {{ title }}</div>
  <button @click="sayToFather">親コンポーネントに話しかける</button>
</テンプレート>
<script lang="ts">
「vue」から{defineComponent}をインポートします。
エクスポートデフォルトdefineComponent({
  名前:「子供」、
  小道具: {
    タイトル:
      タイプ: 文字列、
    },
  },
  セットアップ(プロパティ、コンテキスト) {
    // コンテキストの目的は、コンテキスト オブジェクトを取得することです。
    // セットアップがsetup(props, {emit})と書かれている場合、次のコンテキストは省略できます。const sayToFather = () => {
      const ask = "私は子コンポーネントです。親コンポーネントと対話します"
      context.emit("listen", ask)
    }
    戻る {
      父に言う、
    }
  },
})
</スクリプト>
<スタイル></スタイル>

要約する

この記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。

以下もご興味があるかもしれません:
  • Vue親子コンポーネントのデータ転送、変更、更新方法
  • Vue で子コンポーネントが親コンポーネントのデータを変更できるようにする方法
  • Vueにおける親子間の値転送双方向バインディングとデータ更新の問題の詳細な説明
  • Vue3.0 父子パラメータ転送、親データの子による変更

<<:  Mysql systemctl start mysqld によって報告されるエラーの解決策

>>:  入力要素 [type="file"] を使用する場合のスタイルのカスタマイズとブラウザの互換性の問題に関する議論

推薦する

【Webデザイン】E-WebTemplates の美しい海外の Web ページ テンプレート (FLASH+PSD ソース ファイル+HTML) を共有します

これらはすべて海外のE-WebTemplates WebサイトからのWebページテンプレートであり、...

WeChatアプレットの下部にあるタブバーがコンテンツをブロックする問題に対処する簡単な方法

WeChatアプレットでタブバーを設定すると、重要なコンテンツがブロックされ、iPhoneXなどの異...

クエリプロファイラを使用して MySQL ステートメントの実行時間を表示する方法

前回の記事では、MySQL ステートメントの実行時間をチェックする 2 つの方法を紹介しました。今日...

自己終了XHTMLタグを書くときに注意すべきこと

XHTMLの img タグは、次のように記述する必要があります: <img alt="...

一般的な JavaScript 文字列メソッド 28 個と使用方法のヒントのまとめ

目次序文1. 文字列の長さを取得する2. 文字列の指定された位置の値を取得する(1) charAt(...

Vue の 4 つのカスタム命令の説明と使用例

4つの実用的なVueカスタム指示1. Vドラッグ要件: マウスドラッグ要素アイデア:要素のオフセット...

CSS でデフォルトのスタイルをクリアし、共通のスタイルを設定する方法

CSS デフォルトスタイルをクリア通常の明確なデフォルト スタイル: *{ マージン:0; パディン...

el-table のテーブルを最適化するために仮想リストを使用する方法についての簡単な説明

目次序文解決具体的な実装満たすべき前提条件質問序文テーブルをよく使用します。データ量が多い場合は直接...

javascript:void(0) の意味と使用例

voidキーワードの紹介まず、void キーワードは JavaScript で非常に重要なキーワード...

HTML の title 属性を正しく使用するためのヒント

コンテンツを携帯電話、タブレット、支援技術のユーザーから非表示にし、キーボードのユーザーにのみ表示す...

基礎知識: ウェブサイトのアドレスの前の http はどういう意味ですか?

HTTPとは何ですか?ウェブサイトを閲覧したいときは、ブラウザのアドレス バーにウェブサイトのアド...

Nginxにモジュールを動的に追加する方法

前面に書かれた多くの場合、現在のプロジェクトの状況とビジネスニーズに基づいて Nginx をインスト...

jsを使用してスライダーをドラッグする効果を実現します

この記事では、jsでスライダーをドラッグする方法の具体的なコードを参考までに共有します。具体的な内容...

ハイパーリンクの表示と開き方

<br />関連記事: ハイパーリンクを表示して開く方法症状<br />ユー...

Vmware + Ubuntu18.04 に Hbase 2.3.5 をインストールするための詳細なチュートリアル

序文前回の記事では Hadoop をインストールしましたが、今回は Hbase をインストールします...