1. ASHIRIのふろんとあれ、なんだっけぇ
  2. なんだっけぇ一覧
  3. javascript
  4. 【Vue基礎】算出プロパティcomputedを理解する

【Vue基礎】算出プロパティcomputedを理解する

CATEGORY : javascript
【Vue基礎】算出プロパティcomputedを理解する 【Vue基礎】算出プロパティcomputedを理解する
今回は、JavaScriptのフレームワークVueでよく利用されるcomputedについて、紹介をさせていただきます。
目次

    computedとは

    Vueのcomputedは算出プロパティ(computed property)とも呼ばれ、リアクティブな仕組みの中で「依存しているデータが変わったときだけ自動的に再計算されるプロパティ」を定義するために使います。算出プロパティの代わりに、同じような関数をメソッドとして定義しても同じ結果となります。しかしcomputedは、関数(methods)と違い依存している値が変更されない限り、キャッシュされた結果を返します。ちょっと言葉では難しい感じがしますかね。簡単なコードで確認してみましょう。

     

    computedとmethodsのちがい

     

    例えば、下記コードで確認してみます。

     

    
    <template>
      <p>computed: {{ sumComputed }}</p>
      <p>method: {{ sumMethod() }}</p>
    </template>
    <script setup>
    import { ref, computed } from 'vue'
    const a = ref(2)
    const b = ref(3)
    const sumComputed = computed(() => {
      console.log('computed 再計算')
      return a.value + b.value
    })
    function sumMethod() {
      console.log('method 実行')
      return a.value + b.value
    }
    </script>
    

     

    コンソール環境で確認すると

     

    
    computed 再計算
    method 実行
    

     

    もちろん上記のコンソールになりますね。では、テンプレートに何かタグを足すなり、テキストをいれて再描画をしてみましょう。そうすると

     

    
    method 実行
    

     

    sumComputedは再計算されません!依存している値sumComputedが変わらなければ再実行しない。しかしメソッドsumMethodは呼ばれるたびに毎回実行されます。どうでしょうかわかりやすかったでしょうか?上記は基礎的なコードですが、これがもし重い処理が書かれたコードだとcomputedはキャッシュされるので、非常におすすめですね。

     

     

    Computedの活用

     

    computedの使いどころは、その値に変更があった場合「動的に何かしらの処理を実行する」時が主な使いどころかと思います。例えば

     

    • 入力フォームのリアルタイムバリデーション

    • 日付や数値のフォーマット変換

    • 一覧のフィルタリング(リアルタイムで検索 / 業務アプリなどに使える)

    • 合計金額・集計系の表示

    他にもUIの表示切り替えなどテンプレート内で何度も呼ばれるような処理はcomputedを使うと再計算が減ります。

     

     

    ■日付や数値のフォーマット変換

    表示用の変換は何度もおきるが、元データが変わらなければ再計算されない

     

    
    <template>
      <div>{{ formatteDate }}</div>
    </template>
    <script setup>
    import dayjs from 'dayjs'
    import { ref, computed } from 'vue'
    const rawDate = ref(dayjs().format('YYYY-MM-DDTHH:mm:ss'))
    const formatteDate = computed(() => {
      const date = new Date(rawDate.value)
      return `${date.getFullYear()}年${date.getMonth() + 1}月${date.getDate()}日`
    })
    console.log('formatteDate実行')
    </script>
    

     

    もちろん実行時はコンソールが表示されますが、取得した日付が再描画されない限りformatteDateは実行されません。

     

     

    ■合計金額・集計系の表示

    データが変われば 合計も自動更新されるが、データが変わらなければ合計の再描画はおきない

     

    
    const items = ref([
      { price: 100, quantity: 2 },
      { price: 200, quantity: 1 }
    ])
    const total = computed(() =>
      items.value.reduce((sum, item) => sum + item.price * item.quantity, 0)
    )
    console.log(total)
    

     

     

     

    comuptedは、値を表示に再利用したいときや複雑な計算・重い処理がある場合、他にもgetとsetを使って、オブジェクト形式でv-modelのような双方向バインディングも可能です。comuptedは上級クラスになると難易度は高めかと思いますが、最適化しやすい関数で効率よく処理を実行できるので使いこなしていきたいですね。

     

     

     

    まとめ

    いかがでしたでしょうか。今回はcomuptedについてご紹介させていただきました。値を使って何か表示する、キャッシュも効いて値の変更にも対応できる computed 。応用的な使い方や使いどころの解説より実践的な使用のきっかけになれば幸いです。

    以上となります。できる限りわかりやすく伝えようとしても書くのは難しいです。
    コードや記事の書き方について気になるところがあれば、アドバイスいただけると嬉しいです。

    【Vue基礎】算出プロパティcomputedを理解する
    CATEGORY : javascript

    アシリソリューション

    アシリソリューション

    アシリ・ソリューション

    要件定義からブラッシュアップ/実装運用まで一貫して担当。また内部対策を中心に、GTM・GA4・Looker Studioと分析・改善案の策定も進めています。北緯43度マルチエンジニア

    最近のなんだっけぇ

    1. 【javascript基礎】自動見積フォームの仕組みを理解する

      【javascript基礎】自動見積フォームの仕組みを理解する

    2. 【Node基礎】APIエンドポイントの保護を理解する

      【Node基礎】APIエンドポイントの保護を理解する

    3. 【Node基礎】RESTful API を理解する

      【Node基礎】RESTful API を理解する

    4. 【Vue基礎】Vue Routerのネストを理解する

      【Vue基礎】Vue Routerのネストを理解する

    5. 【Vue基礎】v-onディレクティブを理解する

      【Vue基礎】v-onディレクティブを理解する

    6. 【Vue基礎】v-modelディレクティブを理解する

      【Vue基礎】v-modelディレクティブを理解する

    1. API
    2. computed
    3. css
    4. ECMA
    5. javascript
    6. jquery
    7. Node
    8. php
    9. reactive
    10. reduce メソッド
    11. ref
    12. sass
    13. SSH
    14. v-bind
    15. v-on
    16. Vue
    17. Vディレクティブ
    18. wordpress
    19. セキュリティ対策
    20. 入れ子
    21. 繰り返し処理
    22. 関数