2024. 1. 3. 18:10ㆍ뷰(Vue)
이 글은 주 단위로 하던 스터디 를 개인적으로 정리하는 글입니다.
9장
Composition API 에 대해서 설명하는것으로 시작한다.
기존에는 options API 형식으로 사용하던걸 Vue3버전에서 부터 Composition API 방식으로 변경하여 적용이 가능하다.
Composition API 를 사용할때의 장점은 구분이 명확하게 이뤄질 수 있다는 점이다.(data, method, onMounted 등등을 사용할 때 조금 더 직관적임.)
ref와 reactive를 사용한 state관리에 대해서 말한다.
ref를 사용하는경우 state에 직접 접근하지 못하고 .value를 호출하여 값을 가져와야한다.
Vue에서는 상태변화를 감지하기 위해 프록시 형태로 감싸게되는데 이 부분때문인듯 하다.
Composition API에서도 computed() 를 동일하게 사용 할 수 있지만 ref를 사용하여 변수에 접근 할테니 사용에 유의하라고 되어있다.
watch..
해당기능을 동일하게 제공하지만 사용하는 방식이 조금 다르기 때문에 주의해야한다.
watch(data, (current, old) ⇒ {
//current 변경된 값
//old 변경되기 전 값
//처리하려는 연산로직 영역
})
watch 내부에서 사용하는 current, old의 경우 ref로 감싸진 객체가 아니라 .value에 해당하는 value값이 전달된다. 사용에 주의가 필요하다.
export default {
name:'',
const x = ref(0);
const result = ref(0);
watch(x, (current, old) => {
result.value = current * 2;
})
return {x, result}
}
물론 여러개의 데이터를 넣어 감시(watch) 할 수도 있다.
reactive를 사용하는경우에는 조심해야한다.
state.x로 바로 접근하면 안되고 getter를 통한 호출을 해야한다.
불가능한 코드
<script>
import { reactive, watch } from 'vue';
export default {
name:"Calc6",
setup () {
const state = reactive({ x:0, result:0 });
watch(state.x, (current, old)=>{
console.log(`${old} -> ${current}`);
state.result = current * 2;
})
return { state }
}
}
</script>
getter로 명명한 임시함수를 호출(정상동작)
<script>
import { reactive, watch } from 'vue';
export default {
name:"Calc6",
setup () {
const state = reactive({ x:0, result:0 });
watch(()=>state.x, (current, old)=>{
console.log(`${old} -> ${current}`);
state.result = current * 2;
})
return { state }
}
}
</script>
watchEffect는 Vue 3에서 반응성 데이터 의존성을 추적하는 기능을 제공하는 새로운 방법이다.
차이점은 다음과 같다고 한다.(누가 정리해둔거 가져옴 )
구분 watch watchEffect
감시대상(의존성 지정) | 필요함. 지정된 감시 대상 데이터가 변경되면 핸들러 함수가 실행됨 | 불필요함. 핸들러 함수 내부에서 이용하는 반응성 데이터가 변경되면 함수가 실행됨. |
변경전 값 | 이용가능, 두번째 인자값을 이용하여 알 수 있음. | 이용불가, 받는 인자값이 없음. |
감시자 설정 후 즉시실행 여부 | 즉시 실행X | 즉시 실행 |
watchEffect 사용형식
watchEffect( () => {
//반응성 데이터를 사용하는 코드
})
예시코드
export default {
name:'',
const x = ref(10);
const y = ref(20);
const result = ref(0);
watchEffect( () => {
result.value = x.value + y.value;
})
return {x, y, result}
}
차이점을 보자면 ref의 value값으로 직접 접근하여 변경한다. 그리고 즉시 실행된다.
그리고 감시 대상이 없기때문에 해당 컴포넌트 내부에 모든 반응형 데이터가 변경될때 동작한다.
(불필요한 동작이 있을 수 있음.)
그리고 watchEffect의 경우에는 감시를 해제 할 수 있다. (1회성으로도 가능)
사용방법은 watch와 watchEffect를 명명후 return받는 값을 재실행하면 된다.
handler = watchEffect( () => { ...내부로직 수행 })
#return 받은거 수행시 감시자 해제됨.
handler()
- 생명주기
책에서는 이하 코드들을 Composition API를 사용하는 형태로 변경하고있었다.
그리고 script setup에 대한 설명을 수행한다.
script setup의 장점
보다 간결하게 코드를 작성 할 수 있다.
순수 타입스크립트 언어를 사용해 props 등을 선언하여 사용 할 수 있다.
런타임 성능이 더 좋다.
그리고 기존 setup을 사용하는 경우 해당 영역내부에 composition api를 호출해야 했지만 그 부분들이 밖으로 나온다..!
emit(이벤트)를 발신하거나 props를 선언할때도 편하게 가능하다.
//기존방식
setup(props, context){
context.emit('add-todo', todo)
}
// script setup 방식
const props = defineProps({
todoItem : { type: Object, required: true}
})
const emit = defineEmits(['delete-todo', 'toggle-compalted'])
emit('delete-todo', id)
각각 props, emit에 대한 영역 구분이 명확하게 된다.
책에서는 composition API를 반드시 사용 할 필요는 없지만 기존에 사용하던 options API보다 장점이 많기에 권장한다고 한다. (특히 새롭게 개발하는 application이라면 더)
대신 반응성 데이터를 사용 할 때 주의해야 하는 부분들에 신경써야한다.(ref, reactive)
그 이후 내용들에 대해서..
10장 vue-router를 이용한 라우팅
11장 axios를 이용한 HTTP 통신
12장 vue-router와 axios를 사용한 예제
13장 pinia를 이용한 상태 관리
위 내용들은 대부분 실질적인 프로젝트를 세팅하면서 건드린 부분들이 더 많아서 따로 정리하진 않았다.
13장의 경우 Vuex와 Pinia의 차이점에 대해서 정리해둔 블로그 글이 많기에 그쪽을 살펴보면 될 것 같고,
11장과 12장의 경우
널리 알려진 ajax와 같이 비동기 통신을 하는점은 동일하다. 대신 axios의 경우 편의성 기능이나 timeout에 대한 설정 및 json 형태로의 변환을 지원하는 등등 여러가지에 대해 개선점이 있다.
안드로이드 개발자들도 비동기 통신을 할때 axios 모듈을 사용해서 하는 것 같았다.
react를 할때도 주로 썼었던 부분들도 있어서 비교 글에 대해서 한번 찾아보면 좋을 것 같다.
ajax axios fetch 3개!
해당 책 스터디 글은 여기서 종-료 합니다~
'뷰(Vue)' 카테고리의 다른 글
Vue Transition 적용하기 (0) | 2024.01.05 |
---|---|
setup() 과 script setup의 차이 (2) | 2024.01.04 |
원쌤의 Vue.js 퀵스타트 책을 보았다(Vue3)_6 (1) | 2024.01.03 |
원쌤의 Vue.js 퀵스타트 책을 보았다(Vue3)_5 (1) | 2023.12.29 |
원쌤의 Vue.js 퀵스타트 책을 보았다(Vue3)_4 (0) | 2023.12.20 |