ホームページ  >  記事  >  ウェブフロントエンド  >  コンピューティングと Vue について知り、その違いについて話しましょう

コンピューティングと Vue について知り、その違いについて話しましょう

青灯夜游
青灯夜游転載
2021-12-07 19:20:501909ブラウズ

この記事では、Vue での computed と watch の紹介と、computed と watch の違いについて紹介します。

コンピューティングと Vue について知り、その違いについて話しましょう

#1. computed

1. 目的: 計算された属性は、計算された属性です

# 2. 計算プロパティの利点

: 他のプロパティに基づいて計算されるいくつかのプロパティを 1 つのプロパティに変換できますcomputed には

依存関係キャッシュ

があります (computed の依存関係がある場合)。変更しないと、計算は再計算されません。データの一部が他のデータに依存する場合は、計算されるデータを設計します。 [関連する推奨事項:「vue.js チュートリアル 」] 例 (ユーザー名表示):

Vue.config.productionTip = false;

new Vue({
  data: {
    user: {
      email: "jade@qq.com",
      nickname: "jade",
      phone: "18810661088"
    }
  },
  computed: {
    displayName: {
      get() {
        const user = this.user;
        return user.nickname || user.email || user.phone;
      },
      set(value) {
        console.log(value);
        this.user.nickname = value;
      }
    }
  },
  // DRY don't repeat yourself
  // 不如用 computed 来计算 displayName
  template: `
    <div>
      {{displayName}}
      <div>
      {{displayName}}
      <button @click="add">set</button>
      </div>
    </div>
  `,
  methods: {
    add() {
      console.log("add");
      this.displayName = "圆圆";
    }
  }
}).$mount("#app");

3、cache

: 依存するプロパティが変更されない場合、それらは再計算されませんgetter/setterデフォルトではキャッシュは行われません。Vue は特別な処理を行っていますキャッシュ方法?次の例を参照できます:

2. watch (listening/listening)

1. Purpose

: データが変更されたときに関数を実行します。履歴の完璧な実装 関数

の関数 (メソッド) 例 (元に戻す)

:

import Vue from "vue/dist/vue.js";

Vue.config.productionTip = false;

new Vue({
  data: {
    n: 0,
    history: [],
    inUndoMode: false
  },
  watch: {
    n: function(newValue, oldValue) {
      console.log(this.inUndoMode);
      if (!this.inUndoMode) {
        this.history.push({ from: oldValue, to: newValue });
      }
    }
  },
  // 不如用 computed 来计算 displayName
  template: `
    <div>
      {{n}}
      <hr />
      <button @click="add1">+1</button>
      <button @click="add2">+2</button>
      <button @click="minus1">-1</button>
      <button @click="minus2">-2</button>
      <hr/>
      <button @click="undo">撤销</button>
      <hr/>

      {{history}}
    </div>
  `,
  methods: {
    add1() {
      this.n += 1;
    },
    add2() {
      this.n += 2;
    },
    minus1() {
      this.n -= 1;
    },
    minus2() {
      this.n -= 2;
    },
    undo() {
      const last = this.history.pop();
      this.inUndoMode = true;
      console.log("ha" + this.inUndoMode);
      const old = last.from;
      this.n = old; // watch n 的函数会异步调用
      this.$nextTick(() => {
        this.inUndoMode = false;
      });
    }
  }
}).$mount("#app");
追加

immediate: true

, watch になります1 回のレンダリング中にトリガーされます <pre class="brush:js;toolbar:false;">Vue.config.productionTip = false; new Vue({ data: { n: 0, obj: { a: &quot;a&quot; } }, template: ` &lt;div&gt; &lt;button @click=&quot;n += 1&quot;&gt;n+1&lt;/button&gt; &lt;button @click=&quot;obj.a += &amp;#39;hi&amp;#39;&quot;&gt;obj.a + &amp;#39;hi&amp;#39;&lt;/button&gt; &lt;button @click=&quot;obj = {a:&amp;#39;a&amp;#39;}&quot;&gt;obj = 新对象&lt;/button&gt; &lt;/div&gt; `, watch: { n() { console.log(&quot;n 变了&quot;); }, obj:{ handler(){ console.log(&quot;obj 变了&quot;); }, deep:true }, &quot;obj.a&quot;: function() { console.log(&quot;obj.a 变了&quot;); } } }).$mount(&quot;#app&quot;);</pre>

構文 1:

コンピューティングと Vue について知り、その違いについて話しましょう

上記のアロー関数の外側の関数はグローバル スコープであり、グローバル スコープの this は Global object window/global なので、ここでは this.n/this.xxx を取得できません。したがって、watch

    構文 2:
  • # ではアロー関数を使用してはなりません。 ##
    vm.$watch(&#39;xxx&#39;,fn,{deep:...,immediate:...})
  • watch

2 というデータ名との重複を避けるために、watch の前に $ が追加されています。

deep:true

は何をするのでしょうか?

object.a

が変更された場合、object は変更としてカウントされますか? 答えを [変更されている] にする必要がある場合は、deep:true を使用します。 答えを [変更されていない] にする必要がある場合は、deep:false# を使用します。 # deep

は内部を見るのではなく、深く見ることを意味します。

true は深く見ることを意味します。デフォルトは false (表面アドレスのみを見る) です。 obj

のアドレスを比較するだけでなく、その中のデータが変更されたかどうかも比較する必要があります。

obj が変更されたと見なす必要があります。 3. 概要

computed
    : 計算されたプロパティを意味します
  • watch
  • : モニタリングを意味します
  • watch
  • は非同期コードをサポートしますが、
  • computed はサポートしません。
  • computed
呼び出し時にこの値を追加する必要はありません。括弧内では、依存関係に基づいて自動的にキャッシュされます。つまり、依存関係が変更されない場合、

computed の値は再計算されません。 watch

2 つのオプションがあり、1 つ目は

immediate で、この関数は最初の実行時にレンダリングされることを意味し、もう 1 つは deep は、オブジェクトを監視したい場合、そのプロパティの変化を見たいかどうかを意味します。

データが他のデータに依存している場合は、データを
    computed
  • ;

    必要に応じて設計します。特定のデータが変化したときに、
  • watch
  • を使用してこのデータの変化を観察します。

    上記は、
  • computed

watch の違いです。 プログラミング関連の知識について詳しくは、プログラミング入門

をご覧ください。 !

以上がコンピューティングと Vue について知り、その違いについて話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjuejin.cnで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。