Vue の計算プロパティの詳細な説明

Vue の計算プロパティの詳細な説明

今日は、Vue の計算プロパティについてお話ししましょう。計算プロパティの利点をよりよく理解するために、まずはケースを通して計算プロパティをゆっくり理解してみましょう。次のケースがあります。2 つの入力ボックスと span タグを定義します。span タグの内容は、2 つの入力ボックスの値です。span タグの内容は、入力ボックスの内容に応じて変化します。

補間式

この効果を実現するために、まず補間表現法を使用します。

 <本文>
    <div id="アプリ">
        姓: <input type="text" v-model=firstName> </br>
        </br>
        名前: <input type="text" v-model=lastName></br>
        </br>
        名前: <span>{{firstName}}{{lastName}}</span>
​
    </div>
</本文>
<script type="text/javascript">
    新しいVue({
        el: "#app",
        データ: {
            firstName: '张',
            姓: '三'
        },
        メソッド: {
        }
    })
​
</スクリプト> 

必要な効果を簡単に達成できることが分かりますが、ここで別の要件を追加したい場合、英語を入力するときに最初の文字を大文字にする必要があります。現時点では、次の方法のみを使用できます。

 <本文>
    <div id="アプリ">
        ファーストネーム: <input type="text" v-model=firstName> </br>
        </br>
        姓: <input type="text" v-model=姓></br>
        </br>
        フルネーム: <span>{{firstName.replace(firstName[0],firstName[0].toUpperCase())}} {{lastName.replace(lastName[0],lastName[0].toUpperCase())}}</span>
​
    </div>
</本文>
<script type="text/javascript">
    var str = ''
​
    新しいVue({
        el: "#app",
        データ: {
            ファーストネーム: 'ジョー',
            姓: 'lili'
        },
        メソッド: {
        }
    })
</スクリプト> 

補間式から、目的の効果は得られるものの、コードが非常に長く、読みにくいことがわかります。現時点では、メソッドにメソッドを追加することで、この効果を実現できると考えられます。

方法

メソッドにfullNameメソッドを追加する

<本文>
    <div id="アプリ">
        ファーストネーム: <input type="text" v-model=firstName> </br>
        </br>
        姓: <input type="text" v-model=姓></br>
        </br>
        フルネーム: <span>{{fullName()}}</span>
​
    </div>
</本文>
<script type="text/javascript">
    var str = ''
​
    新しいVue({
        el: "#app",
        データ: {
            ファーストネーム: 'ジョー',
            姓: 'lili'
        },
        メソッド: {
            フルネーム() {
                a = '' とします。
                b = '' とします。
                (this.firstName.length != 0) の場合
                    a = this.firstName.replace(this.firstName[0], this.firstName[0].toUpperCase())
                (this.lastName.length != 0) の場合
                    b = this.lastName.replace(this.lastName[0], this.lastName[0].toUpperCase())
                a + ' ' + b を返す
            }
        }
    })
​
</スクリプト>

コードが長すぎるという問題は、メソッドを通じてうまく解決できることがわかります。しかし、別の問題に直面しています。vue のデータ属性を調べると、data 内のデータが変更される限り、ページ内でデータが使用される場所が更新されることがわかります。したがって、firstName と lastName のデータが変更されると、fullName メソッドが再度呼び出され、特定の状況下ではコード効率が低下します。さらに、methods 内のメソッドは、補間式で使用される回数だけ実行されます。上記の 2 つの方法の欠点に基づいて、計算プロパティを使用する別の方法が登場しました。

計算された

一部のプロパティは、computed: 計算プロパティで定義できます。計算属性の本質は実際にはメソッドですが、使用時には属性として直接使用できます。具体的な特徴は以下のとおりです

  • 計算プロパティを使用する場合は、() を追加する必要はなく、名前のみを記述します。
  • 計算プロパティがデータ内のデータを使用する場合、データが変更されると、計算プロパティの値はすぐに再計算されます。
  • 計算されたプロパティの結果は、最初に使用されたときにキャッシュされ、プロパティが依存するデータが変更されるまで、計算されたプロパティの結果は再評価されません。
 <本文>
    <div id="アプリ">
        ファーストネーム: <input type="text" v-model=firstName> </br>
        </br>
        姓: <input type="text" v-model=姓></br>
        </br>
        フルネーム: <span>{{fullName}}</span></br>
        </br>
        フルネーム: <span>{{fullName}}</span></br>
        </br>
        フルネーム: <span>{{fullName}}</span>
​
    </div>
</本文>
<script type="text/javascript">
    var str = ''
​
    新しいVue({
        el: "#app",
        データ: {
            ファーストネーム: 'ジョー',
            姓: 'lili'
        },
        計算: {
            //get の機能は何ですか? fullName が読み取られると get が呼び出され、戻り値は fullName の値になります。//get はいつ呼び出されますか? 1. fullName が初めて読み取られるとき。 2. 依存データが変更された場合 fullName: {
                得る() {
                    console.log('こんにちは、computed を呼び出しました')
                  a = '' とします。
                b = '' とします。
                (this.firstName.length != 0) の場合
                    a = this.firstName.replace(this.firstName[0], this.firstName[0].toUpperCase())
                (this.lastName.length != 0) の場合
                    b = this.lastName.replace(this.lastName[0], this.lastName[0].toUpperCase())
                a + ' ' + b を返す
                }
            }
        }
    })
</スクリプト>
</html> 

前に、methods 内のメソッドがページ内で n 回使用されると n 回呼び出されると言いましたが、computed 内のプロパティではこれは発生しません。上記のコードでは、ページ内で同じ計算プロパティを 3 回使用しましたが、結果は 1 回しか出力されませんでした。同様に、メソッド内で完全なメソッドを使用しましたが、結果は 3 回出力されました。つまり、メソッドは 3 回呼び出されたことになります。なぜこんなことが起きたのでしょうか?これは、computed にはキャッシュ メカニズムがありますが、methods にはキャッシュ メカニズムがないためです。コードが最初の fullName を解析すると、fullName の結果がキャッシュされます。2 番目と 3 番目の fullName が解析されると、結果がすでにキャッシュ内にあることがわかり、呼び出されません。

これで、computed の使用法について大まかに理解できたので、補足してみましょう。

computedでは、計算プロパティにsetメソッドを追加することで割り当て効果を実現できます。

 <本文>
    <div id="アプリ">
        ファーストネーム: <input type="text" v-model=firstName> </br>
        </br>
        姓: <input type="text" v-model=姓></br>
        </br>
        フルネーム: <span>{{fullName}}</span></br>
        </br>
    </div>
</本文>
<script type="text/javascript">
    var str = ''
​
    var アプリ = 新しい Vue({
        el: "#app",
        データ: {
            ファーストネーム: 'ジョー',
            姓: 'lili'
        },
        計算: {
            //get の機能は何ですか? fullName が読み取られると get が呼び出され、戻り値は fullName の値になります。//get はいつ呼び出されますか? 1. fullName が初めて読み取られるとき。 2. 依存データが変更された場合 fullName: {
                得る() {
                    console.log(これ)
                    this.firstName + this.lastName を返す
                },
                設定(値) {
                    this.firstName = val[0]
                    this.lastName = val[1]
                }
            }
        }
    })
​
</スクリプト>

コンソールで fullName に値を割り当てると、firstName と lastName の両方が変更されることがわかります。

計算プロパティにgetのみがありsetがない場合は、次のコードのように直接記述できます。

計算: {
            フルネーム(){
                console.log(これ)
                this.firstName + this.lastName を返す
                }
            }

要約する

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

以下もご興味があるかもしれません:
  • Vue での ref の使用法とデモンストレーション
  • Vue の計算プロパティ
  • setup+ref+reactive は vue3 の応答性を実装します
  • Vue3 の ref toRef と toRefs の違いを理解する方法
  • Vue3 の ref、computed、reactive、toRefs をご存知ですか?

<<:  nginxでgzip圧縮を有効にする手順を完了する

>>:  CSS3はNESゲームコンソールのサンプルコードを実装します

推薦する

IDEA で mysql8.0.3 と mybatis-generator を使用する際に発生するバグ

1. プラグインを追加し、pomファイルの下に次の設定を追加します。 <!-- mybatis...

Web 標準アプリケーション: Tencent QQ ホームページの再設計

Tencent QQのホームページがリニューアルされ、Webフロントエンド開発がますます注目を集めて...

JavaScript演算子の使用に関するヒントをいくつか共有します

目次1. オプションの連鎖演算子 [? .】 2. 論理的な空の代入 (?? =) 3. 論理和代入...

Linux で nginx を起動および再起動する方法

Nginx (エンジン x) は、IMAP/POP3/SMTP サービスも提供する高性能 HTTP ...

HTML a タグの href 属性を使用して相対パスと絶対パスを指定する方法

実際のWeb開発では、画像の挿入やCSSファイルなどすべてパスが必要となります。ファイルパスを誤って...

HTML の隠しフィールドの紹介と例

基本的な構文: <input type="hidden" name=&qu...

Linux で MySQL のルート パスワードを変更する方法

序文このサービスは数か月前からMySQLに導入されています。私の仕事は基本的にターミナルで行われるた...

Linux システムでの nginx サーバーのインストールと負荷分散構成の詳細な説明

nginx (エンジン x) は、高性能な HTTP およびリバース プロキシ サーバー、メール プ...

一般的な Nginx のテクニックと例の概要

1. 複数サーバーの優先順位たとえば、各サーバー ブロックがポート 80 をリッスンする場合、www...

js、css、htmlはブラウザのさまざまなバージョンを決定します

正規表現を使用してIEブラウザのバージョンを判別するIEブラウザかどうか確認するif (docume...

Nginx プロセス スケジューリングの問題の詳細な説明

Nginx は、マスター プロセス (MasterProcess) と、同じ数のホスト CPU コア...

ページを更新せずにフォームを送信するには iframe を使用します

そこで、この問題を解決するために埋め込みフレームワークを導入します。具体的な原則は、フォームがデータ...

Vueのレスポンシブシステムの原理の詳細な説明

目次Vueのレスポンシブシステムの基本原則1. Object.definePropertyの使い方を...

MySQL 5.7.20 の解凍バージョンをインストールするための詳細な手順 (2 つの方法)

Windows 64ビットでのMySQLのインストールについて説明します。5.7以降、MySQLの...

MySQLで全角文字と半角文字を保存する場合の違い

残念ながら、社内の IM のテスト中に MYSQL_DATA_TRUNCATED エラーが再び発生し...