目次
Method" >Method
計算されたプロパティ" >計算されたプロパティ
观察者" >观察者
结论" >结论
ホームページ ウェブフロントエンド Vue.js Vue の計算プロパティ、メソッド、ウォッチの違い

Vue の計算プロパティ、メソッド、ウォッチの違い

Sep 27, 2020 pm 06:09 PM
computed methods vue watch

Vue の計算プロパティ、メソッド、ウォッチの違い

Vue を学び始めたばかりの人にとって、メソッド、計算プロパティ、オブザーバーの違いは少し混乱するかもしれません。多くの場合、それぞれを使用して多かれ少なかれ同じことを達成できますが、どの点で他のものより優れているかを知ることが重要です。

この簡単なヒントでは、Vue アプリケーションのこれら 3 つの重要な側面とその使用例について説明します。これら 3 つの方法をそれぞれ使用して、同じ検索コンポーネントを構築します。

Method

Method は、ほぼ予想どおりのもので、オブジェクトのプロパティである関数です。メソッドを使用して、DOM 内で発生するイベントに反応したり、コンポーネント内の他の場所 (たとえば、計算プロパティやオブザーバー) からメソッドを呼び出すことができます。メソッドは、よく使用される機能をグループ化するために使用されます。たとえば、フォーム送信の処理や、Ajax リクエストの作成などの再利用可能な機能の構築に使用されます。

メソッド オブジェクト内の Vue インスタンスにメソッドを作成できます:

new Vue({
  el: "#app",
  methods: {
    handleSubmit() {}
  }
})
ログイン後にコピー

それをテンプレートで使用する場合は、次の操作を行うことができます:

<div id="app">
  <button @click="handleSubmit">
    Submit
  </button>
</div>
ログイン後にコピー

v-on ディレクティブ を使用して、イベント ハンドラーを DOM 要素に付加します。これは、@ 表記で省略することもできます。

handleSubmit メソッドは、ボタンがクリックされるたびに呼び出されます。たとえば、メソッド本体で必要なパラメータを渡したい場合は、次のようにすることができます。

<div id="app">
  <button @click="handleSubmit(event)">
    Submit
  </button>
</div>
ログイン後にコピー

ここでは、Event オブジェクト を渡します。これにより、ブラウザーのフォーム送信時のデフォルトのアクション。

ただし、ディレクティブを使用してイベントを添付しているため、modifiers: @click.stop="handleSubmit" を使用して、同じことをよりエレガントに実現できます。

次に、メソッドを使用して配列内のデータのリストをフィルターする例を見てみましょう。

デモでは、データ リストと検索ボックスをレンダリングします。ユーザーが検索ボックスに値を入力するたびに、レンダリングされるデータが変更されます。テンプレートは次のようになります。

<div id="app">
  <h2>Language Search</h2>

  <div class="form-group">
    <input
      type="text"
      v-model="input"
      @keyup="handleSearch"
      placeholder="Enter language"
      class="form-control"
    />
  </div>

  <ul v-for="(item, index) in languages" class="list-group">
    <li class="list-group-item" :key="item">{{ item }}</li>
  </ul>
</div>
ログイン後にコピー

ご覧のとおり、ユーザーが検索フィールドに入力するたびに呼び出される handleSearch メソッドを参照しています。メソッドとデータを作成する必要があります。

new Vue({
  el: &#39;#app&#39;,
  data() {
    return {
      input: &#39;&#39;,
      languages: []
    }
  },
  methods: {
    handleSearch() {
      this.languages = [
        &#39;JavaScript&#39;,
        &#39;Ruby&#39;,
        &#39;Scala&#39;,
        &#39;Python&#39;,
        &#39;Java&#39;,
        &#39;Kotlin&#39;,
        &#39;Elixir&#39;
      ].filter(item => item.toLowerCase().includes(this.input.toLowerCase()))
    }
  },
  created() { this.handleSearch() }
})
ログイン後にコピー

handleSearch メソッドは、リストされた項目を入力フィールドの値で更新します。注意すべき点の 1 つは、メソッド オブジェクトでは this.handleSearch を使用してメソッドを参照する必要がないことです (これは反応で行う必要があります)。

計算されたプロパティ

上記の例の検索は期待どおりに機能しますが、より洗練された解決策は次のとおりです。 計算されたプロパティ。計算プロパティは、既存のリソースから新しいデータを結合するのに非常に便利で、メソッドに対する大きな利点の 1 つは、出力をキャッシュできることです。これは、計算されたプロパティに関連しないページ上の何かが変更されて UI が再レンダリングされた場合、キャッシュされた結果が返され、計算されたプロパティが再計算されないため、コストがかかる可能性のある操作が節約されることを意味します。

計算されたプロパティを使用すると、利用可能なデータを使用してオンザフライで計算を実行できます。この場合、並べ替える必要がある一連の項目があります。ユーザーが入力フィールドに値を入力したときに並べ替えたいと考えています。

私たちのテンプレートは、計算されたプロパティ (filteredList) を v-for ディレクティブに渡したことを除いて、前の反復とほぼ同じに見えます:

<div id="app">
  <h2>Language Search</h2>
  <div class="form-group">
    <input
      type="text"
      v-model="input"
      placeholder="Enter language"
      class="form-control"
    />
  </div>
  <ul v-for="(item, index) in filteredList" class="list-group">
    <li class="list-group-item" :key="item">{{ item }}</li>
  </ul>
</div>
ログイン後にコピー

スクリプト部分が少し異なります。メソッドを計算プロパティ内のメソッドに移動するのではなく、data 属性 (以前は空の配列でした) で言語を宣言します:

new Vue({
  el: "#app",
  data() {
    return {
      input: &#39;&#39;,
      languages: [
        "JavaScript",
        "Ruby",
        "Scala",
        "Python",
        "Java",
        "Kotlin",
        "Elixir"
      ]
    }
  },
  computed: {
    filteredList() {
      return this.languages.filter((item) => {
        return item.toLowerCase().includes(this.input.toLowerCase())
      })
    }
  }
})
ログイン後にコピー

filteredList computed プロパティには、入力フィールドの値を含む項目の配列が含まれます。最初のレンダリング時 (入力フィールドが空の場合)、配列全体がレンダリングされます。ユーザーがフィールドに値を入力すると、filteredList はフィールドに入力された値を含む配列を返します。

計算されたプロパティを使用する場合、計算されるデータが使用可能である必要があります。使用できない場合、アプリケーション エラーが発生します。

計算されたプロパティは新しい filteredList プロパティを作成するため、テンプレート内でそれを参照できます。依存関係が変更されるたびに、filteredList の値が変更されます。ここで簡単に変更できる依存関係は、入力の値です。

最后,请注意,计算属性使我们可以创建一个变量,以在由一个或多个数据属性构建的模板中使用。一个常见的示例是fullName从用户的名字和姓氏创建一个,如下所示:

computed: {
  fullName() {
    return `${this.firstName} ${this.lastName}`
  }
}
ログイン後にコピー

在模板中,您可以执行{{fullName}}。每当第一个或最后一个名称的值发生变化时,fullName的值就会发生变化。

观察者

当您希望对发生的更改(例如,对一个道具或数据属性)执行一个操作时,观察者非常有用。正如Vue文档所述,当您希望执行异步或昂贵的操作来响应数据更改时,这是最有用的。

在我们的搜索示例中,我们可以返回到方法示例,并为input data属性设置一个监视程序。然后,我们可以对input值的任何变化做出反应。

首先,让我们还原模板以利用languages data属性:

<div id="app">
  <h2>Language Search</h2>

  <div class="form-group">
    <input
      type="text"
      v-model="input"
      placeholder="Enter language"
      class="form-control"
    />
  </div>

  <ul v-for="(item, index) in languages" class="list-group">
    <li class="list-group-item" :key="item">{{ item }}</li>
  </ul>
</div>
ログイン後にコピー

然后我们的Vue实例将如下所示:

new Vue({
  el: "#app",
  data() {
    return {
      input: &#39;&#39;,
      languages: []
    }
  },
  watch: {
    input: {
      handler() {
        this.languages = [
          &#39;JavaScript&#39;,
          &#39;Ruby&#39;,
          &#39;Scala&#39;,
          &#39;Python&#39;,
          &#39;Java&#39;,
          &#39;Kotlin&#39;,
          &#39;Elixir&#39;
        ].filter(item => item.toLowerCase().includes(this.input.toLowerCase()))
      },
      immediate: true
    }
  }})
ログイン後にコピー

在这里,我已经将观察者作为对象(而不是函数)。这样,我可以指定一个immediate属性,该属性将导致观察者在安装组件后立即触发。这具有填充列表的效果。然后,运行的函数在该handler属性中。

结论

正如他们所说,强大的力量伴随着巨大的责任。Vue为您提供了构建出色应用程序所需的超能力。知道何时使用它们是建立用户喜爱的关键。方法计算属性观察者是您可以使用的超能力的一部分。展望未来,一定要好好利用它们!

相关推荐:

2020年前端vue面试题大汇总(附答案)

vue教程推荐:2020最新的5个vue.js视频教程精选

更多编程相关知识,请访问:编程入门!!

以上がVue の計算プロパティ、メソッド、ウォッチの違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

VUEのボタンに関数を追加する方法 VUEのボタンに関数を追加する方法 Apr 08, 2025 am 08:51 AM

HTMLテンプレートのボタンをメソッドにバインドすることにより、VUEボタンに関数を追加できます。 VUEインスタンスでメソッドを定義し、関数ロジックを書き込みます。

VueでBootstrapの使用方法 VueでBootstrapの使用方法 Apr 07, 2025 pm 11:33 PM

vue.jsでBootstrapを使用すると、5つのステップに分かれています。ブートストラップをインストールします。 main.jsにブートストラップをインポートしますブートストラップコンポーネントをテンプレートで直接使用します。オプション:カスタムスタイル。オプション:プラグインを使用します。

vue.jsでJSファイルを参照する方法 vue.jsでJSファイルを参照する方法 Apr 07, 2025 pm 11:27 PM

vue.jsでJSファイルを参照するには3つの方法があります。タグ;; mounted()ライフサイクルフックを使用した動的インポート。 Vuex State Management Libraryを介してインポートします。

VueでWatchの使用方法 VueでWatchの使用方法 Apr 07, 2025 pm 11:36 PM

Vue.jsの監視オプションにより、開発者は特定のデータの変更をリッスンできます。データが変更されたら、Watchはコールバック関数をトリガーして更新ビューまたはその他のタスクを実行します。その構成オプションには、すぐにコールバックを実行するかどうかを指定する即時と、オブジェクトまたは配列の変更を再帰的に聴くかどうかを指定するDEEPが含まれます。

Vueによる前のページに戻る方法 Vueによる前のページに戻る方法 Apr 07, 2025 pm 11:30 PM

vue.jsには、前のページに戻る4つの方法があります。$ router.go(-1)$ router.back()outes&lt; router-link to =&quot;/&quot; Component Window.history.back()、およびメソッド選択はシーンに依存します。

Vueはマーキー/テキストスクロール効果を実現します Vueはマーキー/テキストスクロール効果を実現します Apr 07, 2025 pm 10:51 PM

CSSアニメーションまたはサードパーティライブラリを使用して、VUEでマーキー/テキストスクロール効果を実装します。この記事では、CSSアニメーションの使用方法を紹介します。スクロールテキストを作成し、テキストを&lt; div&gt;をラップします。 CSSアニメーションを定義し、オーバーフローを設定します:非表示、幅、アニメーション。キーフレームを定義し、アニメーションの開始と終了時にtranslatex()を設定します。期間、スクロール速度、方向などのアニメーションプロパティを調整します。

Vue Paginationの使用方法 Vue Paginationの使用方法 Apr 08, 2025 am 06:45 AM

ページネーションは、パフォーマンスとユーザーエクスペリエンスを向上させるために、大きなデータセットを小さなページに分割するテクノロジーです。 VUEでは、次の組み込みメソッドを使用してページを使用できます。ページの総数を計算します。TotalPages()トラバーサルページ番号:V-For Directive on Currentページを設定します。

Function Intercept Vueの使用方法 Function Intercept Vueの使用方法 Apr 08, 2025 am 06:51 AM

VUEの関数傍受は、指定された期間内に関数が呼び出され、パフォーマンスの問題を防ぐ回数を制限するために使用される手法です。実装方法は次のとおりです。LodashLibrary:Import {Debounce}から「Lodash」からインポート。 debounce関数を使用して、インターセプト関数を作成します。インターセプト関数を呼び出すと、制御関数は500ミリ秒でせいぜい1回呼び出されます。

See all articles