본문 바로가기
FrontEnd/Vue 2

[Vue.js] Watch 속성

by Chaedie 2022. 9. 18.
728x90

Vue에서 데이터가 변할 때마다 실행 되는 Watch 속성

  • 데이터의 변화를 감지하여 메서드가 실행되도록 할 수 있습니다.
  • 이 watch 속성을 사용하면 React의 useEffect처럼 특정 데이터가 변할 떄마다 어떤 행동을 하도록 만들 수 있습니다.
  • 아래 예제를 보면 num이 변할 때마다 this.logText()라는 메서드를 실행하게 됩니다.
  • 이런 방식은 아래 react useEffect() 훅과 비슷한 효과를 볼 수 있겠습니다.
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <div id="app">
      <span>{{num}}</span>
      <button v-on:click="addNum">increase</button>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <script>
      new Vue({
        el: '#app',
        data: {
          num: 10,
        },
        watch: {
          num: function () {
            this.logText();
          },
        },
        methods: {
          addNum: function () {
            this.num = this.num + 1;
          },
          logText: function () {
            console.log('changed');
          },
        },
      });
    </script>
  </body>
</html>
// 실행은 안시켜봤는데 위 코드와 아래코드가 같은 코드인것 같습니다. num이 변할 때마다 useEffect 안의 logText()가 실행, 
// 단 하나 다른점은 아래 코드에서는 mount되는 시점에 logText가 한번 실행 되겠네요. 

import { useEffect, useState } from 'react';

function CompareWatchAndUseEffect () {
  const [num, setNum] = useState(0); 
  const addNum = () => setNum(prev=> prev + 1)
  const logText = () => console.log('changed');

  useEffect(() => {
      logText();
  }, [num]);

  return (
    <div>
        <span>{num}</span>
        <button onClick={addNum}>increase</button>
    </div>
  )
}

댓글