언어·프레임워크/Vue.js
[Vue.js] watch로 두개 이상의 값 변경 감지
DandyNow
2024. 9. 25. 13:13
728x90
반응형
두 개 이상의 값 변경 감지
둘 이상의 값에 대한 변경을 감지하여 하나의 값이라도 변경이 일어나면 특정 메서드를 실행하는 코드가 필요했다. 아래 코드는 computed에 임의로 정의한 data1(), data2()의 반환 값을 watch에서 감지하여 둘 중 값이 하나라도 변경되면 동일한 handleUpdate() 함수가 호출되도록 작성한 것이다. 주의할 점은 감시하는 값이 객체인 경우에는 "deep" 속성을 추가해야 변경을 감지할 수 있다.
computed: {
data1() {
return this.$store.state.data1; // vuex 상태 값1
},
data2() {
return this.$store.state.data2; // vuex 상태 값2
}
},
watch: {
data1: 'handleUpdate',
data2: {
handler: 'handleUpdate',
deep: true // 상태 값이 객체인 경우 속성 값 변화 감지
}
},
methods: {
handleUpdate() {
this.update1();
this.update2();
},
update1() {
console.log("업데이트1");
},
update2() {
console.log("업데이트2");
}
}
2024-09-27 추가
watch를 사용하지 않더라도 양방향 데이터 바인딩(클래스 바인딩 등) 된 경우 Vuex의 state가 변경되면 자동으로 화면에 리렌더링 된 한다. 하지만 이번에 자동으로 리렌더링 되지 않는 문제가 있었다. 그 이유는 아래와 같은 방식으로 상태 값을 변경했기 때문이다. Vuex는 mutations를 통해서 상태를 업데이트해야 Vue가 이를 감지할 수 있다.
this.$store.state.data = "변경할 값"; // 이렇게 변경하면 값은 변경되지만 리렌더링이 되지 않는다.
728x90
반응형