iT邦幫忙

2023 iThome 鐵人賽

DAY 11
0

昨天提到的methods,跟他相似的computed是專門用來進行計算的屬性,我先從昨天methods的程式改寫

  <div id="app">
        <input type ="number" v-model ="price" placeholder="價格">
        <input type ="number" v-model ="quantity" placeholder="數量">
        價格: {{ price }}
        數量: {{ quantity }},
        <p>總金額: {{ total }} 元</p>
        <p>總金額: {{ total }} 元</p>
        <p>總金額: {{ total }} 元</p>
    </div>
        const count = Vue.createApp({
            data() {
                return {
                    price: 100,
                    quantity: 10
                }
            },
            computed: {
                total: function(){
                    return this.price * this.quantity
                }
            }
        }).mount('#app');

從這個程式來看,methods和computed的寫法非常相似,但當然是因為這個程式很簡單,有關methods和computed的區別我們從教材裡的方式來試試看,讓兩個不同的屬性在執行的時候都在console留下紀錄,現在的模板是這樣的

        <p>總金額: {{ totalCom }} 元</p>
        <p>總金額: {{ totalCom }} 元</p>
        <p>總金額: {{ totalCom }} 元</p>
        <p>總金額: {{ totalMeth() }} 元</p>
        <p>總金額: {{ totalMeth() }} 元</p>
        <p>總金額: {{ totalMeth() }} 元</p>

我讓它們分別執行3次,然後打開console會看到他們執行的紀錄是這樣的
https://ithelp.ithome.com.tw/upload/images/20230926/201630618gqum9G1qT.png
從這個結果來看,methods執行了3次computed卻只執行了1次,這是因為computed執行之後會將結果保存,在屬性的值未產生變化的情況下它並不會再次執行。
所以如果是重複的計算,使用computed會比使用methods有更高的效能,但如果在function中需要帶入參數,使用methods是沒有辦法進行的,就只能選擇使用methods來執行了。

教材裡提供的更能理解的例子是幣值轉換器,一開始簡單的想如果我只想要轉換在台幣和日幣之間,用methods來設定一個兩個幣值之間轉換的工具,可以很簡單明瞭的解決。但如果我想要讓這個轉換器可以輸入的不同幣值增加比如美金、英鎊、港幣等,再使用methods的話就需要一直複製程式而且讓程式重複執行。這個時候如果運用computed有的set也就是回傳的話,可以將台幣作為基準,讓其他的幣值使用computed對台幣進行計算再回傳,也可以更方便以後再加入其他幣值的計算。

上面這個例子的實作因為時間問題所以會放在明天的進度進行嘗試,謝謝閱讀。


上一篇
D10: template & methods
下一篇
D12: 幣值轉換器
系列文
從0開始學習30天可以到什麼程度?30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言