データバインディングとリストデータの表示には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プロジェクトをデプロイする方法

推薦する

Dockerはポートマッピングを設定しますが、ソリューションにアクセスできません

#docker ps チェック、すべてのポートがマップされています コンテナID イメージ コマンド...

Dockerコンテナ内の設定ファイルの変更の実装

1. コンテナに入るdocker run [オプション] イメージ名 [起動コンテナに渡されるコマン...

JS 実用的なオブジェクト指向スネークゲームの例

目次考える1. 貪欲な蛇の効果画像2. スネークの分析2.1 ゲーム開始機能2.2 運動機能2.2....

JavaScript 型検出方法の例のチュートリアル

序文JavaScriptはWebフロントエンドで広く使われている言語の一つであり、Webアプリケーシ...

リバースプロキシ設定を実装するためのユニバーサルnginxインターフェース

1. プロキシサーバーとは何ですか?プロキシ サーバーは、クライアントが要求を送信すると、それを直接...

MySQL データ操作 - DML ステートメントの使用

例示するDML(データ操作言語)とは、データベースの追加、削除、変更を行うための操作命令のことです。...

div タグ内の要素の margin-top が無効である場合の解決策

タイトル通りです。その質問は非常に奇妙です。要素の親タグはdivで、幅や高さなどの属性は設定されてい...

k8s に ingress-nginx をデプロイする手順

目次序文1. Ingressの展開と構成2. httpsを使用する序文k8sクラスタサービスがデプロ...

CSS 極座標のサンプルコード

序文このプロジェクトには、衛星測位用のグラフィックスを含むチャートの要件があり、北半球または南半球の...

Vue のドロップダウン ボックスのセカンダリ リンク効果を実装するためのサンプル コード

1. 成果を達成する 2. バックエンドから返されるデータ形式 「リスト」: [ { "i...

実行中のDockerコンテナのポートマッピングを変更する方法

序文docker run がコンテナを作成して実行するときに、-p を使用してポート マッピング ル...

Vue の el-table は自動天井効果を実現します (固定をサポート)

目次序文実装のアイデア効果:使用:メインソースコード:序文多くのケースを見た結果、単純な観点からは、...

MySQLでテーブルを接続するいくつかの方法

MySQL テーブルでの接続方法は実は非常に簡単なので、ここではその特徴を簡単にリストします。テーブ...

IE8 開発者ツール メニューの説明

<br />この記事では、開発者ツールのさまざまなメニューについて簡単に説明しました。こ...

nginx が動的と静的の分離を実装する方法の例

目次server1にnginxをデプロイするサーバーにlnmpを展開するノード3にhttpdをデプロ...