setup

  • 새로운 옵션
  • 컴포넌트 안에서 composition api 사용하는 진입점

호출 시점

  • 컴포넌트 instance가 생성될때 props 초기화 이후
  • beforeCreate 훅 이전에 호출
  • object 반환
  • object 속성은 컴포넌트 템플릿에서 사용된다
<template>
  <div>{{ count }} {{ object.foo }}</div>
</template>

<script>
  import { ref, reactive } from 'vue'

  export default {
    setup() {
      const count = ref(0)
      const object = reactive({ foo: 'bar' })

      // expose to template
      return {
        count,
        object
      }
    }
  }
</script>

setup을 통해서 반환되는 refs는 자동적으로 템플릿 접근 시 감싸있지 않다. 그래서 .value를 사용할 필요가 없다

  • setup은 render 함수를 반환 할 수 있음

    같은 범주에 선언되어 있는 reative state를 바로 접근 할 수 있게 해줌

import { h, ref, reactive } from 'vue'

export default {
  setup() {
    const count = ref(0)
    const object = reactive({ foo: 'bar' })

    return () => h('div', [count.value, object.foo])
  }
  • aruguments

    • props의 첫번째 인자를 함수에서 받음

        export default {
          props: {
            name: String
          },
          setup(props) {
            console.log(props.name)
          }
        }
    • props 객체는 반응성임

      watchEffect, watch로 새로운 props가 전달될 때 확인할 수 있음

        export default {
          props: {
            name: String
          },
          setup(props) {
            watchEffect(() => {
              console.log(`name is: ` + props.name)
            })
          }
        }

      props객체를 해체를 하면 반응성을 잃음

        export default {
          props: {
            name: String
          },
          setup({ name }) {
            watchEffect(() => {
              console.log(`name is: ` + name) // Will not be reactive!
            })
          }
        }

      props객체는 개발하는 동안 불변

      만약, 사용자 코드를 변경하려고 시도하면 경고함

      setup의 두번째 인자는 context 객체(vue2와 this처럼 ) 제공

        const MyComponent = {
          setup(props, context) {
            context.attrs
            context.slots
            context.emit
          }
        }

      attrs와 slots는 내부 구성요소의 proxy

      이를 통해 항상 최근 값을 노출하고 오래된 참조에 접근 하지 않고도 값을 구조화 할 수 있음

        const MyComponent = {
          setup(props, { attrs }) {
            // 최근 상테를 가져옴
            function onClick() {
              console.log(attrs.foo) // 가장 최근 참조 보장
            }
          }
        }
  • this

    setup()에서는 사용 불가

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

[vue3] Reactivity Utilities  (0) 2020.09.30
[vue3] composition API  (0) 2020.09.30
[vue3] Reactivity APIs  (0) 2020.07.02
[vue3] vue 2 > vue3  (0) 2020.07.02

+ Recent posts