Vue 3에서 ref
와 reactive
는 반응형 데이터를 만드는 두 가지 방법. 이 둘은 데이터의 유형과 사용 방식에서 차이가 있음.
ref
ref
는 값을 감싸는 객체를 반환하며, 이 객체의 .value
속성에 접근해야 실제 값을 읽거나 쓸 수 있음.
import { ref } from 'vue';
export default {
setup() {
const count = ref(0); // 숫자 0을 반응형으로 생성
const increment = () => {
count.value++; // .value로 접근
};
return { count, increment };
},
};
count.value
가 변하면, 이를 사용하는 컴포넌트도 자동으로 업데이트.reactive
.value
없이 직접 속성에 접근 가능.import { reactive } from 'vue';
export default {
setup() {
const state = reactive({
count: 0,
message: 'Hello, Vue 3!',
});
const increment = () => {
state.count++; // .value 필요 없음
};
return { state, increment };
},
};
state.count
나 state.message
가 변하면, 이를 사용하는 컴포넌트가 자동으로 업데이트.특징 | ref | reactive |
---|---|---|
사용 대상 | 단일 값 (숫자, 문자열 등) | 객체, 배열, 복잡한 데이터 구조 |
접근 방식 | .value 로 접근 | 속성에 바로 접근 |
반응형 전환 방식 | 값을 감싼 객체 생성 | 객체/배열 자체를 반응형으로 변환 |
중첩 데이터 처리 | 중첩 객체나 배열은 추가로 reactive 필요 | 중첩된 데이터도 자동 반응형 처리 |
reactive
는 객체 전체를 반응형으로 만들지만, 개별 속성을 추적하려면 ref
를 사용할 수 있음.import { reactive, ref } from 'vue';
export default {
setup() {
const state = reactive({
user: {
name: ref('Alice'), // 개별 속성을 ref로
},
age: 25,
});
const updateName = () => {
state.user.name.value = 'Bob'; // .value 사용
};
return { state, updateName };
},
};
ref
: 단일 값을 선물 상자에 넣어서 .value
로 꺼내 쓰는 것.reactive
: 객체나 배열을 투명한 박스로 감싸서 바로 속성을 볼 수 있는 것.