본문 바로가기
개인공부/Vue3

Vue3 #6

by BTSBRINGMEHERE 2023. 11. 29.

서론

반응형 데이터 이어서~


반응형 데이터

computed()

getter 함수를 사용하며, getter로부터 반환된 값을 읽기 전용 반응형 ref 객체로 반환합니다. get set 함수가 있는 객체를 사용하면, 쓰기 가능한 ref 객체를 반환합니다.

즉, 변화 된 값을 단순하게 보여줄 때 사용하고 계산된 값을 출력합니다.

const count = ref(1)
const plusOne = computed({
  get: () => count.value + 1,
  set: (val) => {
    count.value = val - 1
  }
})

plusOne.value = 1
console.log(count.value) // 0

 

watch

하나 이상의 반응형 데이터 소스를 감시하고, 소스가 변경되면 콜백 함수를 호출합니다.

데이터 변화를 감시하고 그에 따른 특정 동작을 수행할 수 있게 해주는 기능입니다.

 

첫 번째 인자는 감시될 소스입니다.

  • 값을 반환하는 getter 함수
  • ref
  • 반응형 객체
  • 또는 위에 나열한 것들의 배열

두 번째 인자는 소스가 변경되기 전 값입니다.

클린업 콜백은 다음에 이펙트가 다시 실행되기 직전에 호출되며, 무효화된 사이드 이펙트를 정리하는 데 사용할 수 있습니다. 예를들어 비동기 요청의 결과 대기중(pending)에 사용할 수 있습니다.

 

세 번째 인자로 옵션 객체를 받아 더 많은 제어를 가능하게 합니다.

  • immediate: 감시자가 생성되는 즉시 콜백이 호출됩니다. 최초 호출 시, 이전 값은 undefined입니다.
  • deep: 소스가 객체인 경우, 깊은 변경사항에서도 콜백이 실행되도록 합니다. 참고: 깊은 감시자.
  • flush: 콜백의 발생(flush) 타이밍을 조정합니다. 참고: 콜백 실행 타이밍, watchEffect().
  • onTrack / onTrigger: 감시자의 의존성을 디버그합니다. 참고: 감시자 디버깅.
watch(
  () => myData.value,
  (newValue, oldValue) => {
    console.log(`값이 변경되었습니다. 이전 값: ${oldValue}, 새 값: ${newValue}`);
  },
  {
    immediate: true, // 초기 로드 시에도 즉시 실행
    deep: true, // 중첩된 객체나 배열의 변경도 감지
    flush: 'post', // 'pre' 또는 'post' 중 언제 실행할지 선택 (기본값: 'pre')
  }
);

 

watchEffect

즉시 함수를 실행하고 의존성을 반응적으로 추적하며, 의존성이 변경될 때마다 다시 실행합니다. 특정 데이터나 함수 등을 감시하고, 해당 대상이 변경될 때마다 자동으로 실행되는 효과를 만듭니다.

 

import { ref, watchEffect } from 'vue';

const myData = ref(0);

watchEffect(() => {
  console.log(myData.value); // 데이터가 변경될 때마다 실행
});

// 데이터 변경
myData.value = 1; // 콘솔에 1 출력

 

watchEffect와 watch의 차이점은 watch는 좀더 정교하게 작업을 할 수 있습니다.

정 데이터를 명시적으로 지정하고, 초기 실행 여부 등을 조절하려면 watch를 사용합니다.

데이터를 명시적으로 지정하지 않고, 그냥 변화에 반응하는 효과만 필요하다면 watchEffect를 사용합니다.

 

 

'개인공부 > Vue3' 카테고리의 다른 글

Vue3 #8  (0) 2023.11.30
Vue3 #7  (0) 2023.11.30
Vue3 #5  (1) 2023.11.27
Vue3 #4  (1) 2023.11.24
Vue3 #3  (1) 2023.11.24