[Vue]컴포지션API란?

youngseo·2022년 5월 26일
0
post-thumbnail

컴포지션 API란?

컴포지션 API란 컴포넌트 내에서 사용하는 특정 기능을 갖는 코드를 유연하게 구성하여 사용할 수 있도록 Vue3버전에 추가된 함수 기반의 API입니다.

Vue의 경우 프로젝트 규모가 커질수록 관리하기가 어려워지게 되는데 이런 단점을 보완할 수 있도록 돕습니다.

<template>
  <h1 @click="increase">
    {{ count }} / {{ doubleCount }}
  </h1>
  <h1>
    {{ message }} / {{ reversedMessage }}
  </h1>
</template>
<script>
export default {
  data() {
    return {
      message: 'Hello world!',
      count: 0
    }
  },
  computed: {
    doubleCount() {
      return this.count * 2
    },
    reversedMessage() {
      return this.message.split('').reverse().join('')
    }
  },
  methods: {
    increase() {
      this.count += 1
    }
  }
}
</script>

위와 같이 각각 message와 관련된 로직, 그리고 count와 관련된 로직을 나뉘어 작성이 된경우 코드가 동작하는 로직을 이해하기 위해서 위 아래로 왔다갔다 하며 상당히 많은 부분을 해석하며 가독성이 떨어지고 유지보수성이 낮아지게 됩니다.

이를 setup이라는 메소드를 통해 컴포지션API 만들어 활용한다면 보다 해석하기 좋은 형태로 만들 수 있습니다.

<template>
  <h1 @click="increase">
    {{ count }} / {{ doubleCount }}
  </h1>
  <h1>
    {{ message }} / {{ reversedMessage }}
  </h1>
</template>
<script>
import { ref, computed } from 'vue'

export default {
  setup() {
    const message = ref('Hello World!')
    const reversedMessage = computed(() => {
      return message.value.split('').reverse().join('')
    })

    const count = ref(0)
    const doubleCount = computed(() => count.value * 2)
    function increase() {
      count.value += 1
    }

    return {
      message,
      reversedMessage,
      count,
      doubleCount,
      increase
    }
  }
}
</script>

하지만 컴포지션 API의 경우 기본적으로 반응성이 없습니다. 따라서 특정한 데이터를 만들어낼 때, 반응성이 가지도록 해주기 위해서 refs라는 기능을 활용할 수 있습니다.

refs기능을 가져와 함수처럼 실행을 하면 기본적으로 반응성을 가진 객체를 반환하게 되며, 그 객체의 내부에 있는 value라는 속성을 통해 반응성을 가지게 만들어줄 수 있습니다.

0개의 댓글