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ゲームコンソールのサンプルコードを実装します

推薦する

sqlite を mysql スクリプトに移行する方法

さっそく、コードを直接投稿します。具体的なコードは次のとおりです。 パーレル # # https:/...

JS でオブジェクトが空オブジェクトかどうかを判断する 5 つの方法

1. jsonオブジェクトをjson文字列に変換し、文字列が「{}」であるかどうかを判断します。 v...

Windows ベースの MySQL 8.0.12 のインストール

このチュートリアルは Windows システムにのみ適用されます。インストールしたがまだインストール...

パーティクルダイナミックボタン効果を実現するCSS

オリジナルリンクhttps://github.com/XboxYan/no…ボタンは、おそらく We...

Centos 7 mysql-8.0.19-1.el7.x86_64.rpm-bundle.tar の簡単な分析

Baiduクラウドディスク:リンク: https://pan.baidu.com/s/1hv5rUW...

CSS3 オーバーフロープロパティの説明

1. オーバーフローOverflow はオーバーフロー(コンテナ)です。コンテンツがコンテナを越える...

Linuxシステムの操作レベルの詳細な紹介

目次1. Linuxシステムの操作レベルの概要2. 実行レベルを確認する3. 現在のシステムの動作レ...

LinuxスレッドのPID(TID、LWP)を取得するいくつかの方法の詳細な説明

Linux C/C++ では、スレッド レベルの操作は通常、pthread ライブラリを通じて実行さ...

Bツリーの削除プロセスの紹介

前回の記事 https://www.jb51.net/article/154157.htm では、B...

Spring Boot 階層化パッケージング Docker イメージの実践と分析 (推奨)

目次1. Springbootプロジェクトを準備する2. 関連する設定を実行する3.パッケージ4.D...

CSS と JS を使用して下線効果を実装する方法の例

この記事では、主に 2 種類の下線の動的効果について説明します。1 つ目は、ホバーすると X 軸が内...

クリエイティブな会社概要ウェブページデザイン

ユニークな「About」ページ自分を他の人たちと差別化する素晴らしい方法は、本当にユニークな自己紹介...

MySQL 8.0 以降の一般的なコマンドの詳細な説明

リモートアクセスを有効にする次のコマンドを実行して、root ユーザーのリモート アクセス権を有効に...

MySQL 1130例外、リモートログインできない解決策

目次質問: 1. リモートログイン権限を有効にする: 2. MySQLの権限を更新します。 3. テ...

Nginx 運用保守ドメイン名検証方法例

インターフェイス ドメイン名を構成する際、各パブリック プラットフォームはドメイン名に対する開発者の...