props
/context
중심이라 추론이 쉽습니다.v-model
로 양방향 바인딩을 간결히 제공하되, 복잡 폼은 단방향 흐름을 섞어 관리하는 것이 좋습니다.function Hello({ name }) {
return <h1>Hello, {name}</h1>;
}
<script setup>
import { ref } from 'vue'
const name = ref('World')
</script>
<template>
<h1>Hello, {{ name }}</h1>
</template>
<script>
, <template>
, <style>
분리로 역할 분담이 명확합니다.<script>
에 두는 것이 좋습니다.// React
const [text, setText] = useState('')
<input value={text} onChange={(e) => setText(e.target.value)} />
// Vue
<script setup>
import { ref } from 'vue'
const text = ref('')
</script>
<template>
<input v-model="text" />
</template>
useState
, useReducer
, useContext
)로 관리합니다. 전역 상태는 Redux/MobX/Zustand/Recoil 등이 사용됩니다.ref/reactive
로, 컴포넌트 간 연결은 v-model/props/emits
또는 provide/inject
로 처리합니다. 전역 상태는 Pinia가 공식 권장 라이브러리입니다.useEffect
/useLayoutEffect
로 효과를 다룹니다. 의존성 배열 관리가 핵심이며, 개발 모드 StrictMode의 이중 호출로 부작용이 드러날 수 있습니다(의도적). 커스텀 훅으로 관심사를 분리하는 패턴이 일반적입니다.onMounted
/onUnmounted
/watch
/watchEffect
로 처리합니다. 반응형 참조의 의존성 자동 추적으로 로직이 간결해지는 장점이 있습니다.memo
, useMemo
, useCallback
등으로 제어합니다.startTransition
, useDeferredValue
로 입력·스크롤을 우선 처리해 체감 성능을 높일 수 있습니다.hydrateRoot
, SSR용 <Suspense>
를 통해 먼저 보여주고 점진 완성하는 패턴에 강합니다.React Docs
Vue Docs
Vue 3 vs React 18: A Comprehensive Comparison from a Developer’s Perspective