ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Vue] Composition API
    SPA/Vue.js 2024. 4. 3. 13:57

    Vue2와 Vue3의 차이점을 정리하던 중 제일 큰 차이점인 Composition API는 따로 정리해야 할 것 같아 글을 작성하게 되었다.


    1. Composition API란?

    Composition API는 함수 기반의 API로, 컴포넌트 내에서 사용하는 코드를 유연하게 구성할 수 있게 하고 코드의 가독성을 높인다.

    게다가 반복되는 코드를 별도의 hooks로 모듈화하고 컴포넌트 내에서 import하여 사용할 수 있기 때문에 코드의 재사용성 측면에서도 유용하다.

     

    (1) setup()

    setup 메서드는 컴포넌트가 생성되기 전(created 이전)에 props를 인식하면 실행되는 옵션이다.

    인자는 props, context(attrs, slots, emit, parent, root)를 받는다.

     

    (1-1) data

    vue3에서는 data를 아래와 같이 정의한다.

    javascript에서 변수/상수를 선언하는 형태와 비슷하다.

    <script setup>
    	let age = 23;
    </script>

     

     

    (1-2) 반응형 데이터

    반응형 데이터들은 ref나 reactive를 사용하여 정의할 수 있다.

    반응형 데이터는 값의 변경을 감지하고 해당 값에 종속된 작업(side effect)을 수행한다.

     

    아래는 ref를 이용한 방식이고

    const infomation = ref({ name: "kimBoolean", age: 23 });
    // 값 변경 시
    infomation.value.age = 100;

     

    아래는 reactive를 이용한 방식이다.

    const infomation = reactive({ name: "kimBoolean", age: 23 });
    // 값 변경 시
    infomation.age = 100;

     

    그렇다면 이 둘의 차이점은 무엇일까?

    ref
    - ref는 원시타입 값을 포함한 다양한 type을 반응형으로 반영한다.
    - 단, 객체의 경우 깊은 감지가 불가하다는 단점이 있다.
    - 원본 값의 접근 및 변경은 ref.value로 조작해야 한다.
    reactive
    - reactive는 객체만을 인자로 받아 반응형을 반영하며 깊은 감지가 가능하다.

     

    ref는 type의 제한이 없다! reactive는 객체일 경우! 사용하기 좋다는 것이다.

     

    (1-3) props

    props의 경우, Vue2와 달라진 점은 defineProps로 받은 props를 정의한다는 것이다.

    const props = defineProps(['title']);
    
    console.log(props.title);

     

    (1-4) computed()

    computed는 메소드를 import하여 함수 형태로 계산된 반환값을 작성해주면 된다.

    const filterList = computed(() => lists.filter(list => list.isFocus));

     

    (1-5) watch

    watch 역시 메소드를 import하여 인자로 감시할 데이터, 조작할 로직, 옵션 등을 받는다.

    Vue2와 동일하게 deep, immediate와 같은 옵션 사용이 가능하다.

    watch(list, (newVal, oldVal) => {
    	...
    }, {immediate: true})

     

     

    (2) 유연한 코드 구성

    처음에는 Composition API가 왜 코드 가독성이 좋다는건지 이해가 가지 않았다.

    Vue2의 구조에 익숙해져있었기에 watch는 watch끼리 묶여있는 게 더 보기 쉽다고 생각했기 때문이다.

     

    그러나 사용해보니 관련 있는 로직끼리 묶어서 볼 수 있다는 점에서 유연한 코드 구성과 더불어 코드 가독성이 향상되는 것 같다.

     

    전반적으로 setup 안에 합쳐졌다는 점과 변수/상수 선언 방식과 비슷하게 선언한다는 점,

    ref, reactive의 차이점에 대해 제대로 알고 있으면 좋을 것 같다.

    'SPA > Vue.js' 카테고리의 다른 글

    [Vue3] ref VS reactive  (0) 2024.04.27
    [Vue] Vue2 VS Vue3 차이점  (0) 2024.04.08
    [Vue] v-deep 셀렉터  (0) 2024.01.09
    Vue.js(9)_Todo  (0) 2022.09.28
    Vue.js(8)_Vue Router  (0) 2022.09.28
Designed by Tistory.