ref vs reactive

ref()와 reactive()는 둘 다 Vue reactivity API다.[1] 이 비교는 reactivity 자체의 차이가 아니라 state shape와 access style 선택 문제를 다룬다 — 둘을 framework 철학의 대립처럼 보면 과하게 쪼개진 지식이 된다. 단순 값, primitive, 전체 교체 가능성이 큰 state는 ref()가 기본 선택이고, 응집된 object/array의 property를 직접 갱신하는 state는 reactive()가 자연스럽다는 관점에서 정리할 수 있다.

ref() vs reactive() 비교표

기준 ref() reactive()
적합한 state shape primitive, single value, 교체 가능한 값 object, array, collection
primitive 지원 가능 불가
script 접근 .value 필요 property 직접 접근
template 접근 자동 unwrap property 직접 접근
전체 교체 자연스러움 주의 필요
대표 예 count, isOpen, selectedId form, user, items

강의는 ref()가 primitive value와 object를 다룰 수 있고, reactive()가 object, array, collection에 적합하다고 소개한다. Template 안에서 ref는 자동 unwrap되고, script에서는 .value가 필요하다.[1:1]

어느 쪽을 먼저 고려할까

ref()를 먼저 고려한다.

reactive()를 고려한다.

두 API 모두 겉으로 보이는 것보다 경계가 헷갈리기 쉽다. reactive()가 더 큰 state에 항상 좋다는 뜻은 아니다 — 전체 교체가 잦으면 ref()가 더 단순할 수 있다. ref()가 primitive 전용이라는 뜻도 아니다 — object도 담을 수 있지만 .value access style이 생긴다. 그리고 script logic에서 .value를 빼먹는 것도 흔한 실수인데, template unwrap 때문에 script와 template에서 같은 ref가 다르게 보일 수 있기 때문이다.

관련

출처

테스트 질문


  1. 01-1.Vuejs-intro.pdf — ref()/reactive()의 대상 state shape와 template/script access 차이 설명 ↩︎ ↩︎