Study/Vue

Vue.js 시작하기 09. Watch

going.yoon 2022. 1. 22. 14:48

watch는 뷰 인스턴스의 어떤 데이터가 변경되면 이를 감지해주는 기능이다.

뷰 인스턴스 내 watch를 선언하고 어떤 변수를 watch 할 것인지, 어떤 행위를 할 것인지 정해주면 된다.

 

 

코드로 알아보자.

 

 

<body>
    <div id="app">
        {{num}}
        <button v-on:click="addNum">increase</button>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
    <script>
        new Vue({
            el: '#app',
            data : {
                num : 10
            },
            watch:{ //#1. watch : num이란 변수가 변경될 때 마다
                num : function () {
                    this.logText(); // #2. logText(); 함수를 호출할 것이다.
                }
            },
            methods : {
                addNum: function(){
                    this.num = this.num + 1 ;
                },
                logText : function(){
                    console.log('changed');
                }
            }
        });
    </script>
</body>

 

이 코드는 아래와 같이 실행된다.

버튼이 눌릴 때마다 num값이 증가하고, num값의 변화를 watch가 감지하고 있다가 콘솔로그를 출력한다.

 

 

 

 

 

computed 와 watch 둘 다 특정 데이터가 변경되면 실행되는 속성이라는 점은 같지만, 뷰 공식문서에서는 watch보다 computed를 사용할 것 을 권장하고 있다. 캐싱이나 튜닝이 더 잘되어 있기 때문이다.

 

Vue does provide a more generic way to observe and react to data changes on a Vue instance: watch properties. When you have some data that needs to change based on some other data, it is tempting to overuse watch - especially if you are coming from an AngularJS background. However, it is often a better idea to use a computed property rather than an imperative watch callback. 

 

 

 

해당 포스팅은 인프런의 Vue.js 시작하기 - Age of Vue.js 학습 후 정리한 내용임을 알려드립니다.