ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Vue.js 문법 - 컴포넌트 기초
    Vue/Vue.js 문법 2021. 7. 16. 00:52

     

    컴포넌트

     

    - 컴포넌트는 이름이 있는 재사용 가능한 인스턴스

     

    예제

     

    App.vue

    <template>
      <MyBtn />
    </template>
    <script>
    import MyBtn from '~/components/MyBtn'
    
    export default {
      components: {
        MyBtn
      }
    }
    </script>

     

    MyBtn.vue

    <template>
      <div class="btn">
        Apple
      </div>
    </template>
    <style scoped>
      .btn {
        display: inline-block;
        margin: 4px;
        padding: 6px 12px;
        border-radius: 4px;
        background-color: gray;
        color: white;
        cursor: pointer;
      }
    </style>

     

    결과

     


     

    컴포넌트 재활용

     

    App.vue

    <template>
      <MyBtn />
      <MyBtn />
      <MyBtn />
      <MyBtn />
    </template>

     

    결과

     

    코드 이해하기

    - 버튼 여러개가 화면에 출력

    - 한번 만들어놓은 컴포넌트(Mybtn.vue)를 재활용

     


     

    Props

     

    - 컴포넌트에 데이터를 전달하기 위해 props 가 등장

    - Props 는 컴포넌트에 등록할 수 있는 커스텀 속성

    - 값이 props 속성에 전달되면, 그 값은 해당 컴포넌트 인스턴스의 속성이 됨

    - 부모 컴포넌트와 자식 컴포넌트 간의 데이터 통신 방법 이라고도 부름

     


     

    예제1 - 데이터 전달

     

    App.vue

    <!--
    <template>
      <MyBtn color="royalblue" />
    </template>
    -->
    
    <template>
      <MyBtn :color="color" />
    </template>
    <script>
    import MyBtn from '~/components/MyBtn'
    
    export default {
      components: {
        MyBtn
      },
      data() {
        return {
          color: 'royalblue'
        }
      }
    }
    </script>

     

    MyBtn.vue

    <template>
      <div 
        :style="{ backgroundColor: color }"
        class="btn">
        Apple
      </div>
    </template>
    <script>
    export default {
      props: {
        color: {
          type: String,
          default: 'gray'
        }
      }
    }
    </script>

     

    결과

     


     

    예제2 - 클래스 추가

     

    App.vue

    <template>
      <MyBtn />
      <MyBtn large />
    </template>

     

    MyBtn.vue

    <template>
      <div
        :class="{ large }"
        class="btn">
        Apple
      </div>
    </template>
    <script>
    export default {
      props: {
        large: {
          type: Boolean,
          default: false
        }
      }
    }
    </script>
    <style scoped lang="scss">
      .btn {
        display: inline-block;
        margin: 4px;
        padding: 6px 12px;
        border-radius: 4px;
        background-color: gray;
        color: white;
        cursor: pointer;
        &.large {
        font-size: 20px;
        padding: 10px 20px;
        }
      }
    </style>

     

    결과

     


     

    예제3 - Slot

     

    - 컴포넌트 사이에 있는 컨텐츠를 받아주는 태그

    - 단순하게 텍스트만 받아서 출력하는 것이 아니라 예제에서 <MyBtn></MyBtn> 태그 사이에 있는 모든 내용을 <slot></slot>이라는 태그로 대체해서 넣어준다 (span 태그 안에 스타일까지 적용됨)

     

    App.vue

    <template>
      <MyBtn>Banana</MyBtn>
      <MyBtn :color="color">
        Apple
      </MyBtn>
      <MyBtn 
        large
        color="royalblue">
        Banana
      </MyBtn>
    </template>

     

    MyBtn.vue

    <template>
      <div
        :class="{ large }"
        :style="{ backgroundColor: color }"
        class="btn">
        <slot></slot>
      </div>
    </template>

     

    결과

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

    Vue.js 문법 - 컴포넌트 Emit  (0) 2021.07.16
    Vue.js 문법 - 컴포넌트 속성 상속  (0) 2021.07.16
    Vue.js 문법 - v-model 수식어  (0) 2021.07.15
    Vue.js 문법 - 폼 입력 바인딩  (0) 2021.07.15
    Vue.js 문법 - 키 수식어  (0) 2021.07.15

    댓글

Designed by Tistory.