watchers는 Vue.js에서 데이터 변경을 감지하고, 특정 데이터가 변할 때마다 반응형으로 특정 작업을 수행할 수 있는 방법을 제공합니다. 즉, 데이터가 변화할 때 이를 감시(watch) 하고 그에 맞는 로직을 수행할 때 유용합니다. computed와 달리 복잡한 비동기 작업이나, 특정 데이터를 기반으로 별도의 로직을 수행할 때 주로 사용됩니다.
watch: {
// 감시할 데이터인 'count'
count(newValue, oldValue) {
console.log(`count가 ${oldValue}에서 ${newValue}로 변경되었습니다.`);
}
}
위 예에서 count 값이 변경되면 watch가 감지하여, 새로운 값과 이전 값을 매개변수로 받아 로직을 실행합니다.
watch는 Vue 컴포넌트의 data, props, computed 등의 값을 감시할 수 있습니다.watchers가 유용합니다.newValue)과 변경 이전 값(oldValue)을 사용할 수 있습니다.deep: true 옵션을 사용합니다.watch: {
// 감시할 데이터 또는 계산된 속성
count(newValue, oldValue) {
console.log('count가 변경되었습니다:', newValue);
}
}
비동기 작업에서 watch를 사용하면 유용합니다. 예를 들어, 사용자가 입력 필드에 값을 입력할 때마다 서버로 요청을 보내고 싶다면, watch를 사용할 수 있습니다.
watch: {
searchQuery(newQuery) {
// 사용자가 입력할 때마다 API 요청을 보냄
this.fetchSearchResults(newQuery);
}
},
methods: {
fetchSearchResults(query) {
// 서버에서 검색 결과를 가져오는 비동기 작업
axios.get(`/api/search?q=${query}`).then(response => {
this.results = response.data;
});
}
}
deep 옵션객체나 배열 같은 복합 데이터 타입을 감시하려면 deep 옵션을 사용해야 합니다.
watch: {
user: {
handler(newValue, oldValue) {
console.log('user 객체가 변경되었습니다:', newValue);
},
deep: true // 객체 내부의 속성 변화를 감지함
}
}
immediate 옵션watch는 기본적으로 데이터가 변경될 때만 실행됩니다. 하지만 immediate: true 옵션을 설정하면, 처음부터 즉시 한 번 실행됩니다.
watch: {
count: {
handler(newValue) {
console.log('처음 실행 또는 count 변경됨:', newValue);
},
immediate: true // 즉시 실행
}
}
watch vs computedcomputed: 데이터에 의존하여 자동으로 값을 계산하고 결과를 캐시합니다. 단순히 데이터를 계산하거나 포맷하는 데 적합합니다.watch: 특정 데이터 변화를 감지하고, 그 변화를 기반으로 비동기 작업이나 외부 데이터를 가져오는 등 복잡한 로직을 수행하는 데 유용합니다.watch를 사용해야 하나?