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

推薦する

Filebeat を使用して Nginx ログを収集する方法

Nginx ログは、ユーザーの住所の場所や行動プロファイルなどを分析するために使用できます。Elas...

Linux で TCP 接続の最大数をテストする方法

序文TCP サーバの最大同時接続数に関して、「ポート番号の上限が 65535 であるため、TCP サ...

リフレッシュリダイレクトを実現する HTML ヘッドタグメタ

コードをコピーコードは次のとおりです。 <html> <ヘッド> <m...

process.env.NODE_ENV 本番環境モードを設定する方法

始める前に、process.env.NODE_ENV にはデフォルトで開発と本番の 2 つの状態しか...

MySQLでのカスタムパラメータの使用に関する詳細な説明

MySQL 変数には、システム変数とシステム変数が含まれます。今回の学習課題はユーザー定義変数です。...

CentOS 7 ブートカーネルの切り替えとブートモードの切り替えの説明

Centos7 スイッチブートカーネル注: 必要に応じて、最初にyum update -yを実行して...

抽選効果を実現するJavaScript

この記事では、宝くじマシンの効果を実現するためのJavaScriptの具体的なコードを参考までに共有...

Zabbix で複数の JVM プロセスを監視する方法

1. シナリオの説明:私たちの環境ではマイクロサービスを使用しています。各プログラムには個別のプロセ...

SQL Server の完全バックアップに関する珍しいエラーと解決策

1. エラーの詳細一度、データベース全体のバックアップを手動で実行したときに、次のエラーが発生しまし...

mysql ダーティ ページとは何ですか?

目次ダーティページ(メモリページ)ダーティページが表示されるのはなぜですか?メモリ管理メカニズムの簡...

C# は MySQL コマンドラインのバックアップとリカバリを実装します

MySQL データベースをバックアップするためのツールは多数あります。過去 2 日間で、C# を使用...

訪問者を惹きつけるウェブサイトコンテンツを作成する14の方法

ネットサーフィンをしていると、私の注意を引こうとする美しいグラフィックでいっぱいの Web サイトを...

RHEL7.5 mysql 8.0.11 インストールチュートリアル

この記事はRHEL7.5でのMySQL 8.0.11のインストールチュートリアルを記録しています。具...

js を使用して過去 1 週間、1 か月、3 か月の時間を取得する簡単な例

目次過去1週間の時間を取得する過去1か月の時間を取得する過去3か月分を取得新しい Date() と ...

2 つの Linux サーバー間の自動ファイル同期

サーバーB(172.17.166.11)の電源がオンまたは再起動されると、サーバーA(172.17....