인프런 커뮤니티 질문&답변

eg2data님의 프로필 이미지

작성한 질문수

Vue3 완벽 마스터: 기초부터 실전까지 - "기본편"

Watch, WatchEffect

watch의 인자로 ref 변수 사용할 때 .value를 붙이지 않는 이유

24.08.22 13:03 작성

·

40

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

 

안녕하세요!

<script> 에서 반응형 데이터를 사용할 때 .value를 통해 접근하고 있습니다.

그런데 watch의 첫번째 인자로서 이를 사용할 때는 .value를 사용하지 않는 것이 희안해보입니다.

이렇게 사용하는 논리적인 이유가 있을까요?

아니면 그냥 그런 것이다! 하고 지나가면 되는 문제일까요!

답변 2

0

짐코딩님의 프로필 이미지
짐코딩
지식공유자

2024. 08. 25. 10:52

Vue 3에서 watch 함수의 첫 번째 파라미터로 ref 변수를 사용할 때 .value를 붙이지 않는 이유는 watch 함수가 자동으로 ref 객체의 내부 값(`value`)을 추적하기 때문입니다.

즉, watch 함수는 ref 변수를 직접 받으면, 그 내부의 실제 값이 변경될 때 반응하도록 설계되어 있습니다. 그래서 .value를 명시적으로 붙이지 않아도 해당 ref의 값이 변경될 때 watch 함수가 실행됩니다.

예를 들어, 다음과 같이 사용할 수 있습니다:

import { ref, watch } from 'vue';

const count = ref(0);

watch(count, (newValue, oldValue) => {

  console.log(`count changed from ${oldValue} to ${newValue}`);

});

위 코드에서 watch 함수는 count.value를 자동으로 감시하므로 .value를 명시적으로 적어줄 필요가 없습니다. 이렇게 하면 코드가 더 간결해지고, ref 객체가 가지고 있는 반응성 특성을 잘 활용할 수 있습니다.

0

인프런 AI 인턴님의 프로필 이미지

2024. 08. 24. 13:06

안녕하세요, 인프런 AI 인턴입니다.

eg2data님의 질문에 답변드리겠습니다.

Vue 3에서는 Composition API를 도입하면서 ref와 reactive 같은 반응형 변수를 사용하게 되었습니다. ref로 선언된 변수는 .value를 통해 해당 값을 직접적으로 접근할 수 있습니다. 그러나 watch 함수 내에서 ref 변수를 감시할 때는 .value를 붙이지 않는데요, 이는 Vue 3의 반응성 시스템이 ref 변수를 인자로 받을 때 자동으로 내부의 반응성을 감지하기 때문입니다.

즉, watch() 함수는 ref 변수의 변화를 자동으로 추적할 수 있도록 설계되어 있기 때문에, 사용자는 .value 없이 ref 변수를 직접 전달할 수 있습니다. 이는 Vue의 반응형 시스템을 더욱 편리하게 사용할 수 있도록 돕는 설계 결정입니다.

이 외에 ref 변수를 직접 사용할 때는 .value를 사용하여 값을 참조하거나 수정해야 합니다. 이렇게 하는 이유는 ref 객체 내부에서 실제 값에 접근하기 위해서이며, 이는 Vue 3의 반응성 시스템이 프록시 객체를 통해 값을 감싸기 때문입니다.

결론적으로, watch 함수 내부에서 .value를 사용하지 않는 것은 Vue 3의 반응형 시스템 설계에 기반한 것으로, 이렇게 함으로써 Vue 3은 개발자가 보다 쉽게 데이터의 변화를 감지하고 대응할 수 있도록 도와줍니다.

감사합니다.

eg2data님의 프로필 이미지

작성한 질문수

질문하기