Vue watch computed和watch的区别

Vue watch

主要用于监听属性的变化,去做一些类似发送请求这样的工作
可以拿到变化前后的属性值
可以检测对象深层次属性以及是否在初始化就触发

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<script src="../lib/vue.js"></script>

<body>
    <div id="root">
        <span>今天天气很{{info}}</span>
        <br>
        <button @click="toggleWeather">切换天气</button>
        <br>
        {{numbers.a}}
        <button @click="changeNumbers('a')">新增a</button>
    </div>
    <script>
        const weatherToggleMap = {
            hot: {
                toggle: 'cold',
                text: '炎热'
            },
            cold: {
                toggle: 'hot',
                text: '凉爽'
            }
        }

        const vm = new Vue({
            el: "#root",
            data: {
                weather: 'hot',
                // 深层属性
                numbers: {
                    a: 1,
                    b: 2
                }
            },
            methods: {
                toggleWeather() {
                    this.weather = weatherToggleMap[this.weather]?.toggle
                },
                changeNumbers(tag) {
                    ++this.numbers[tag]
                }
            },
            computed: {
                info: function () {
                    return weatherToggleMap[this.weather]?.text
                }
            },
            watch: {
                weather: {
                    handler() {
                        console.log('weather change ...');
                    }
                },
                // 'numbers.a':{
                //     handler(){
                //         console.log('numbers change');
                //     }
                // },
                numbers: {
                    handler(newValue, oldValue) {
                        console.log('numbers change');
                    },
                    // 初始化的时候执行一下
                    immediate: true,
                    // 深度监听
                    deep: true
                }
            }
        })

        // vm.$watch('numbers', {
        //     handler(newValue, oldValue) {
        //         console.log('numbers change');
        //     },
        //     // 初始化的时候执行一下
        //     immediate: true,
        //     // 深度监听
        //     deep: true
        // })
    </script>
</body>

</html>

watch和computed的区别

computed有缓存
computed能基于已有属性生成新属性,watch也能实现
一般在watch中发异步请求

posted @ 2022-01-29 11:32  IslandZzzz  阅读(43)  评论(0编辑  收藏  举报