Options API vs Composition API
Vue2 에서 : Options API Vue3 에서 : Composition API
결론적으론 Composition API가 너무 좋다.
Composition API 기반의 강좌가 진행이 될 것임
Options API 와 Composition API 의 차이
Options API 예시 코드
<template>
<div>
<button v-on:click="increment">Counter {{ counter }}</button>
</div>
</template>
<script>
export default {
data() {
return {
counter: 0,
};
},
methods: {
increment() {
this.counter++;
},
},
};
</script>
<style></style>
Composition API의 예제
<template>
<div>
<button v-on:click="increment">Counter {{ counter }}</button>
</div>
</template>
<script>
import { onMounted, ref } from 'vue';
export default {
setup() {
const counter = ref(0);
const increment = () => counter.value++;
onMounted(() => {
console.log('마운트!');
});
return {
counter,
increment,
};
},
};
</script>
<style></style>
두개가 어떻게 다르냐.. Options API data, methods, mounted 나뉘어 있음
Composition API setup() 안에 다 모여있음.
옵션을 선언한 대신 ref, onMounted 등등 Vue 컴포넌트를 작성할 수 있는 API 세트..
왜? Composition API 인가
원래 Options API 를 보면 data, 메서드가 다 나눠져 있음.
그러나 Composition api를 사용하면 관련 데이터, 메서드 등을 모아둘 수 있음 그러면 논리적으로 상당히 괜찮을 수 있음
그러면 하나의 .js 파일로 만들 수도 있음.
논리적 관심사가 같은 애들끼리 모여있게 됨.
오 진짜 괜찮다.
코드의 재사용을 할 수 있는 애들은 Composable 이라고 하는 애라고 한다. 그러면 Mixin도 사용할 필요가 없음.
Composable을 사용하여 코드 재사용을 쉽게 할 수 있다.
Options API 와의 관계
- 기존 OptionsAPI 의 대부분을 대체한다.
- 두개 함께 사용도 가능하다.
- 그래도 그냥 Composition API 로만 개발하는 것이 좋다.
vue 공식 문서상의 좌측에 보면 사용하는 api 별로 선택해서 확인할 수 있으니 참고할 것.
Composition API 에 대하여..
<template>
<div>
<h2>반응형 메세지</h2>
<p>{{ reactiveMesage }}</p>
<button v-on:click="addReacitveMessage">Add Message</button>
<h2>일반 메세지</h2>
<p>{{ normalMessage }}</p>
<button v-on:click="addNormalMessage">Add Message</button>
</div>
</template>
<script>
import { isRef, ref } from 'vue';
export default {
setup() {
const reactiveMesage = ref('Hello Reactive Message');
const addReacitveMessage = () => {
reactiveMesage.value = reactiveMesage.value + '!';
};
console.log(isRef(reactiveMesage));
let normalMessage = 'Hello Normal Message';
const addNormalMessage = () => {
normalMessage = normalMessage + ':';
};
console.log(isRef(normalMessage));
return {
reactiveMesage,
normalMessage,
addReacitveMessage,
addNormalMessage,
};
},
};
</script>
<style></style>
위와 같은 경우 ref로 선언한 변수 (반응형 변수)의 경우 즉각 수정이 가능하지만
normalMessage 일반 변수의 경우에는 즉각 수정은 불가능하다.
isRef 를 사용하면 이게 반응형인지 아닌지를 확인해서 알려줌 true/false
Life Cycel Hook
라이프 사이클 훅
인스턴스나 컴포넌트가 생성될 때 미리 정해진 라이프 사이클을 돌아감.
생성, mount, update, unmount 등등 의 단계임.
그 라이프사이클 단계에서 실행되는 함수를 Life Cycle Hook이라고 한다.
ex) onMounted() 등등
onBeforeMount()
setup 안에서 다 사용할 수 있음.
Composition API 의 Setup 함수
일단 예제 코드
<template>
<div>
<p>{{ counter }}</p>
<p>{{ message }}</p>
<button @click="increment">click!</button>
</div>
</template>
<script>
import { ref } from 'vue';
export default {
setup() {
const counter = ref(0);
const message = ref('hello vue3');
const increment = () => {
counter.value++;
};
return {
counter,
message,
increment,
};
},
};
</script>
<style></style>
setup 속성 안에서 선언한 변수는 template 안에서 사용할 수 있다.
mounted() 안에서 this 변수를 사용할 수 있다.
첫번째 매개변수로 props 가 넘어온다.
context context.attrs context.slots context.emit context.expose
뭐 이런 것들을 사용한다는데 나중에 또 사용한다.