データバインディングとリストデータの表示にはVue3を使用する

データバインディングとリストデータの表示にはVue3を使用する

1. Vue2との比較

1. Vue3の新機能

  • データレスポンスの再実装( ES6 proxy Es5Object.definePropertyを置き換えます)
  • ソースコードはtsを使用して書き直され、型推論が改善されました。
  • 新しい仮想DOMアルゴリズム (より高速、より小さい)
  • ロジックの再利用とコード編成を改善するcomposition apiを提供します
  • カスタムレンダラー( app 、ミニプログラム、ゲーム開発)
  • Fragment 、テンプレートは複数のルート要素を持つことができます

2. Vue2とVue3の応答原理の比較

Vue2Object.definePropertyメソッドを使用してレスポンシブデータを実装します

欠点:

  • オブジェクト プロパティの動的な追加と削除を検出できません
  • 配列の添え字とlengthプロパティの変更を検出できません

解決:

  • Vue2オブジェクトにプロパティを動的に追加するためのVue.$setを提供します。
  • Vue.$deleteオブジェクトのプロパティを動的に削除します

3. 配列の変更を検出するために配列メソッドを書き直す

Vue3 proxyを使用してレスポンシブデータを実装します

アドバンテージ:

  • プロキシオブジェクト属性の動的な追加と削除を検出できます
  • 測定配列の添え字とlength属性の変更を確認できます。

欠点:

  • es6 proxy 、下位バージョンのブラウザ IE11 をサポートしていません。
  • IE11をサポートする特別バージョンがリリースされます

上記引用「[Vue2 と Vue3 の比較]」(https://www.cnblogs.com/yaxinwang/p/13800734.html)

4. 直感的な体験

現状、実際の業務ではVue2が主流となっている

Vue3mounteddatamethodsが含まれており、すべてsetup()でラップされています。

2. Vue3 を使用したデータバインディングの例

前回の記事 Vue3 統合 HTTP ライブラリ axios の詳細 では、バックグラウンド データの返却を実現し、フロント ページに表示しました (コンソールではありますが) が、これはまだ 90% 程度しか完了していないことを意味します。

次のステップは、バックグラウンド インターフェースからデータを返す方法と、それをページに表示する方法です。

1. refを使用してデータバインディングを実装する

homeも変更する必要があります。結局のところ、ページに表示されるので、コードのHome部分のみを変更する必要があります。具体的なサンプル コードは次のとおりです。

<テンプレート>
  <a-レイアウト>
    <a-layout-sider width="200" style="background: #fff">
      <a-メニュー
          モード="インライン"
          v-model:selectedKeys="selectedKeys2"
          v-model:openKeys="openKeys"
          :style="{ 高さ: '100%', 右境界線: 0 }"
      >
        <a-サブメニューキー="sub1">
          <テンプレート #タイトル>
                <span>
                  <ユーザーによるアウトライン />
                  サブナビ1
                </span>
          </テンプレート>
          <a-menu-item key="1">オプション1</a-menu-item>
          <a-menu-item key="2">オプション2</a-menu-item>
          <a-menu-item key="3">オプション3</a-menu-item>
          <a-menu-item key="4">オプション4</a-menu-item>
        </a-サブメニュー>
        <a-サブメニューキー="sub2">
          <テンプレート #タイトル>
                <span>
                  <ラップトップのアウトライン />
                  サブナビ2
                </span>
          </テンプレート>
          <a-menu-item key="5">オプション5</a-menu-item>
          <a-menu-item key="6">オプション6</a-menu-item>
          <a-menu-item key="7">オプション7</a-menu-item>
          <a-menu-item key="8">オプション8</a-menu-item>
        </a-サブメニュー>
        <a-サブメニューキー="sub3">
          <テンプレート #タイトル>
                <span>
                  <通知の概要 />
                  サブナビ3
                </span>
          </テンプレート>
          <a-menu-item key="9">オプション9</a-menu-item>
          <a-menu-item key="10">オプション10</a-menu-item>
          <a-menu-item key="11">オプション11</a-menu-item>
          <a-menu-item key="12">オプション12</a-menu-item>
        </a-サブメニュー>
      </a-メニュー>
    </a-layout-sider>
    <レイアウトコンテンツ
        :style="{ 背景: '#fff', パディング: '24px', マージン: 0, 最小高さ: '280px' }"
    >
      {{電子書籍}}
      <前>
{{電子書籍}}
      </pre>
    </a-レイアウトコンテンツ>
  </a-レイアウト>
</テンプレート>

<script lang="ts">
'vue' から {defineComponent、onMounted、ref} をインポートします。
'axios' から axios をインポートします。

エクスポートデフォルトdefineComponent({
  名前: 'ホーム'、
  設定(){
    console.log('セットアップ');
    定数 ebooks = ref();
    マウント時(()=>{
      axios.get("http://localhost:8888/ebook/list?name=spring").then(応答 =>{
        console.log("マウントされた状態");
        const データ = 応答.データ;
        ebooks.value=データコンテンツ;
      })
    })
    戻る {
      電子書籍
    }

  }
});
</スクリプト>

知識ポイント:

  • const ebooks=ref() ; これはレスポンシブデータであり、 Vue3レスポンシブデータを定義するため ref を追加します。つまり、 ebooksリアルタイムのデータ表示です。
  • refに割り当てられた値はvalueです。
  • 値を取得するには {{variable}} を使用します。

再コンパイルしてサービスを開始すると、次のような結果が表示されます。

2. リアクティブを使用してデータバインディングを実装する

同様にhomeでも変更します。サンプルコードは次のとおりです。

<テンプレート>
  <a-レイアウト>
    <a-layout-sider width="200" style="background: #fff">
      <a-メニュー
          モード="インライン"
          v-model:selectedKeys="selectedKeys2"
          v-model:openKeys="openKeys"
          :style="{ 高さ: '100%', 右境界線: 0 }"
      >
        <a-サブメニューキー="sub1">
          <テンプレート #タイトル>
                <span>
                  <ユーザーによるアウトライン />
                  サブナビ1
                </span>
          </テンプレート>
          <a-menu-item key="1">オプション1</a-menu-item>
          <a-menu-item key="2">オプション2</a-menu-item>
          <a-menu-item key="3">オプション3</a-menu-item>
          <a-menu-item key="4">オプション4</a-menu-item>
        </a-サブメニュー>
        <a-サブメニューキー="sub2">
          <テンプレート #タイトル>
                <span>
                  <ラップトップのアウトライン />
                  サブナビ2
                </span>
          </テンプレート>
          <a-menu-item key="5">オプション5</a-menu-item>
          <a-menu-item key="6">オプション6</a-menu-item>
          <a-menu-item key="7">オプション7</a-menu-item>
          <a-menu-item key="8">オプション8</a-menu-item>
        </a-サブメニュー>
        <a-サブメニューキー="sub3">
          <テンプレート #タイトル>
                <span>
                  <通知の概要 />
                  サブナビ3
                </span>
          </テンプレート>
          <a-menu-item key="9">オプション9</a-menu-item>
          <a-menu-item key="10">オプション10</a-menu-item>
          <a-menu-item key="11">オプション11</a-menu-item>
          <a-menu-item key="12">オプション12</a-menu-item>
        </a-サブメニュー>
      </a-メニュー>
    </a-layout-sider>
    <レイアウトコンテンツ
        :style="{ 背景: '#fff', パディング: '24px', マージン: 0, 最小高さ: '280px' }"
    >
      <strong>データバインディングの結果に ref を使用する:</strong><p></p>
      {{電子書籍1}}
      <p></p>
      <前>
{{電子書籍1}}
      </pre>
      <strong>データバインディング結果に ReactiveF を使用する:</strong><p></p>{{ebooks2}}
      <p></p>
      <前>
{{電子書籍2}}
      </pre>
    </a-レイアウトコンテンツ>
  </a-レイアウト>
</テンプレート>

<script lang="ts">
'vue' から {defineComponent、onMounted、ref、reactive、toRef} をインポートします。
'axios' から axios をインポートします。

エクスポートデフォルトdefineComponent({
  名前: 'ホーム'、
  設定(){
    console.log('セットアップ');
    //データバインディングにはrefを使用します。const ebooks=ref();
    // リアクティブデータバインディングを使用する const ebooks1 = reactive({books:[]})
    マウント時(()=>{
      axios.get("http://localhost:8888/ebook/list?name=spring").then(応答 =>{
        console.log("マウントされた状態");
        const データ = 応答.データ;
        ebooks.value=データコンテンツ;
        ebooks1.books = データコンテンツ;
      })
    })
    戻る {
      電子書籍1: 電子書籍、
      ebooks2:toRef(ebooks1、"書籍")
    }

  }
});
</スクリプト>

知識ポイント:

vueからreactivetoRefをインポートする必要があります。
reactive({books:[]})では、 reactive ()オブジェクトを保存する必要があります。ここでは、 booksに空のコレクションを追加します。
toRef(ebooks1,"books") booksをレスポンシブ変数に変換します。
当然ですが、reactive を使うほうが面倒です。実際のプロジェクト開発では、 reactiveref両方を使用する必要があります。
ref を使用する場合の問題は、変数を使用するときに、それを取得する場合でも使用する場合でもvalueを追加する必要があることです。

再コンパイルしてサービスを開始すると、次のような結果が表示されます。

3. 最後に

フロントエンド開発が人々に与える達成感は、 controllerservice内のビジネスロジックコードのように大量に書かなければならず意味が分からないのとは異なり、直感的に確認できるため、より直接的です。しかし、これはcodingに対する私の愛情に影響を与えるものではありません。

これで、Vue3 を使用したデータバインディングとリストデータの表示に関するこの記事は終了です。Vue3 のデータバインディングとリストデータの表示に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue3 リストインターフェースデータ表示の詳細

<<:  MySQL パスワードに特殊文字が含まれている場合とコマンドラインからログインする場合

>>:  dockerを使用してdubboプロジェクトをデプロイする方法

推薦する

js の関数の長さはどれくらいですか?

目次序文なぜいくらですか?パラメータの数デフォルトパラメータ残りのパラメータ要約する序文今日は関数の...

Linux CentOS6.5 yum インストール mysql5.6

この記事では、Linux yumを使用してmysql5.6をインストールする簡単な手順を参考までに紹...

ウェブカラーのコントラストと調和のテクニックの共有

色のコントラストと調和対照的な状況では、色の相互作用は単一の色によって与えられる感覚とは異なります。...

Expressプロジェクトファイルディレクトリの説明と詳細な機能の説明

app.js: スタートアップファイル、またはエントリファイルpackage.json: プロジェク...

MySQLバックアップとリカバリの実践に関する詳細な説明

1. mysqlbackup の紹介mysqlbackup は、MySQL Enterprise B...

あまり一般的ではないが便利な CSS 属性操作の完全ガイド

1. カスタムテキスト選択 ::選択{ 背景: 赤; 色: 黒; } 2. ビデオコントロールからダ...

HTML 挿入画像の例 (HTML 追加画像)

HTML に画像を挿入するには、画像を表示するための HTML タグが必要です。これは、img タ...

テーブルの幅を固定して、テキストによって幅が変わらないように設定

ページ内のテーブルの幅を width="600px" に設定した後も、幅が固定さ...

MySQLの日付と時刻関数の使用の概要

この記事はMySQL 8.0に基づいていますこの記事では、日付と時刻の操作のための MySQL 関数...

MySQL初心者はグループ化や集計クエリの煩わしさから解放されます

目次1. グループクエリの概略図2. groupbyキーワード構文の詳細な説明3. 簡単なグループク...

nginxリバースプロキシのyum設定の詳細な手順

パート0 背景社内のイントラネットサーバーは直接インターネットにアクセスすることはできませんが、外部...

JavaScript をスリープまたは待機させる方法

目次概要setTimeout() の確認スリープ関数の書き方シンプルな選択ループで実行されますか?要...

HTML+CSS で div タグの右上隅に削除アイコンを追加するサンプルコード

1. 要件の説明Divタグの右上隅に削除アイコンを表示します2. 実装html、CSS 3. 参照コ...

MySQLエラー10061を解決する方法

この記事では、「'localhost' (10061) の MySQL サーバーに接...

すべてまたは逆の選択機能を実現するJavaScript

この記事では、全選択または選択を反転する機能を実現するためのJavaScriptの具体的なコードを参...