음악, 삶, 개발

99% 똑같은데 1% 다른 Component 만들기 : props 본문

개발 Web/Vue.js 공부방

99% 똑같은데 1% 다른 Component 만들기 : props

Lee_____ 2020. 11. 25. 06:20

< 공식 문서 >

 

v3.vuejs.org/guide/component-props.html


< 사용자 정의 속성 : props > 

우리가 어떠 Component 를 만들었지만,

이 Component 로 생성된 각 Instance 의 모습이 약간씩 틀리기를 바랄수있다.

사과 한상자를 샀는데 사과의 모양이 조금씩 틀린것처럼 말이다.

하나의 Component 안에서 기본적 속성은 공유한채

약간은 틀린 offset 을 주고자할때 사용하는것이 props 이다.

props 는 사용자 정의 속성이다.

내가 만든 Component 를 부모 Component 에서 사용할때,

해당 태그에 속성으로 사용할수있는것이다.

Juce 에서 우리가 Component 를 만들었을때, Constructor 에 인자를 

넘기는것과 유사한 방식으로 보면 될것이다.

<Child color="red"/>

위와 같이 우리가 만든 Child 컴포넌트에 color 속성을 만들고싶다면 어떻게 할수있을까?

<!-- Child.vue -->

<template>
  
    <div id="child">

        <div v-bind:style="state.color">Hello World</div>

    </div>

</template>

<script>

    export default {

        props : { 
            
            color : String // Child 테그 속성으로 color 를 사용해줘!
            
        },
        
        setup(props) {

            const state = { 
                
                color   : { color : props.color } 
                
            }

            return { state }

        }
        
    }

</script>

위의 코드에서 중요한것은,

2가지다.

 

1. props 와 setup() 은 같은 선상에 존재해야만함. 

2. setup() 함수의 인자로 props 를 넘겨야함.

 

이제 App.vue 에 Child 를 로딩후 출력해보자.

<!-- App.vue -->

<template>
  
  <Child color="red"/>
  <Child color="blue"/>
  <Child color="green"/>
  <Child color="yellow"/>

</template>

<script>

  import Child from './components/Child.vue'

  export default {

    components : { Child }

  }

</script>

하지만 경우에 따라, Child 컴포넌트에 사용자가 color 속성을 적지않을수도있다.

이런 경우를 대비해, 

props : { 
            
    color : String 
    
}

대신,

props : { 
    
    color : { type : String, default : 'green' }
    
}

으로 작성하여 color 속성이 넘어오지않았을때의 default 값을 정할수있다.

이때 주의할점은 color : { } 식으로 객체가 되어야한다는것이다.

required 를 사용하여 사용자에게 해당 속성을 반드시 입력하도록 강제할수도있다.

props : { 
    
    color : { type : String, required : true }
    
}

만약, required 와 default 가 둘다 존재한다면 required 는 무시된다.

 

반드시 props 공식문서를 읽어보도록한다.