vue基礎:計算屬性vs普通methods方法

先給出結論:

  • 當計算屬性依賴的內容發生變化時,纔會執行,但計算屬性之外的內容發生變化時,是不會重新執行計算的。
  • 普通方法只要頁面重新渲染,都會重新計算
  • 當普通方法和計算屬性實現一樣的效果的時候,計算屬性是更高效的。

舉個例子:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>test</title>
    <script src="https://unpkg.com/vue@next"></script>
</head>

<body>
    <div id="root">
        <div>{{total}}</div>
        <div>{{getTotal()}}</div>

    </div>
</body>
<script>
    const app = Vue.createApp({
        data() {
            return {
                count: 2,
                price: 5,
            }
        },
        computed: {
            total() {
                return this.count * this.price
            }
        },
        methods: {
            getTotal() {
                return this.count * this.price
            }
        },
    });
    const vm = app.mount('#root');
</script>

</html>

  • 這時的計算屬性和普通方法實現的效果是一樣的

換個例子:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>test</title>
    <script src="https://unpkg.com/vue@next"></script>
</head>

<body>
    <div id="root">
        <div>計算屬性:{{msg}}:{{total}}</div>
        <div>普通方法:{{msg}}:{{getTotal()}}</div>

    </div>
</body>
<script>
    const app = Vue.createApp({
        data() {
            return {
                count: 2,
                price: 5,
                msg: 'test1'
            }
        },
        computed: {
            total() {
                return Date.now();
            }
        },
        methods: {
            getTotal() {
                return Date.now();
            }
        },
    });
    const vm = app.mount('#root');
</script>

</html>
  • 這是剛剛運行起來的效果,現在我動態改變下變量msg的值


  • 可以看到當msg的值發生改變的時候,計算屬性裏的Date.now()是沒有變的,而普通方法裏的Date.now()值發生了改變。

所以得出結論:
  • 當計算屬性依賴的內容發生變化時,纔會執行,但計算屬性之外的內容發生變化時,是不會重新執行計算的。
  • 普通方法只要頁面重新渲染,都會重新計算
  • 當普通方法和計算屬性實現一樣的效果的時候,計算屬性是更高效的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章