본문 바로가기
  • 기억의 유한함을 기록의 무한함으로✍️            예비 개발자가 꿈꾸는 공간 여기는 안나의 개발 블로그 💻
Programming/Vue.js

[Vue.js 입문하기] 컴포넌트 통신 - props 속성

by 제가안난데여♪(´ε`*) 2022. 7. 26.
728x90

💭 컴포넌트 통신 방법에 대해 알아보고 props 속성을 통해 컴포넌트 통신을 실습해보자.

❗ 부모 컴포넌트와 자식 컴포넌트

  • 아래 사진처럼 화면의 영역을 쪼개서 재활용 가능한 형태를 컴포넌트라고 한다.
  • 컴포넌트들 간의 관계가 존재하며 하위 컴포넌트는 자식 컴포넌트, 상위 컴포넌트는 부모 컴포넌트라고 한다.
  • 부모 컴포넌트에서 자식 컴포넌트로는 데이터(props)를 준다.
  • 자식 컴포넌트에서 부모 컴포넌트로는 이벤트(event emit)을 준다.

❗ props속성을 이용하여 데이터를 자식 컴포넌트로 전달하기

  • props 는 부모 컴포넌트의 데이터를 전달하기 위한 속성

  • 실습에서는 Root 컴포넌트에서 app-header 컴포넌트로 데이터를 전달해보았다.

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    </head>
    <body>
    <div id="app">
      <!-- <app-header v-bind:프롭스 속성 이름 = "상위컴포넌트의 데이터 이름"> </app-header> -->
      <app-header v-bind:propsdata="message"></app-header>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
      var appHeader = {
        template: "<h1>Header//</h1>",
        props: ["propsdata"], //appHeader에 props 속성 추가
      };
    
      new Vue({
        el: "#app",
        components: {
          "app-header": appHeader,
        },
        data: {
          message: "hi~", //app header 로 전달될 데이터
        },
      });
    </script>
    </body>
    </html>
  • 결과

  • AppHeader 컴포넌트에서 propsdata : "hi~" 데이터가 props를 통해 전달됨을 확인할 수 있다.

❗ props속성을 이용하여 Reactivity(반응성) 확인하기

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <div id="app">
      <!-- <app-header v-bind:프롭스 속성 이름 = "상위컴포넌트의 데이터 이름"> </app-header> -->
      <app-header v-bind:propsdata="message"></app-header>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
      var appHeader = {
        template: "<h1>{{propsdata}}//</h1>",  ////변경된부분
        props: ["propsdata"], //appHeader에 props 속성 추가
      };

      new Vue({
        el: "#app",
        components: {
          "app-header": appHeader,
        },
        data: {
          message: "hi~", //app header 로 전달될 데이터
        },
      });
    </script>
  </body>
</html>
  • {{}} 를 이용하여 props 속성의 배열 요소 변수를 그대로 가져다 작성하면 hi~ 를 가지고 있던 propsdata 값이 그대로 출력되게 된다.
  • 이때 Root 컴포넌트의 데이터 값을 바꿔주게 되면
  • Root 컴포넌트의 data를 전달 받은 하위컴포넌트인 AppHeader 컴포넌트의 propsdata 값도 변하며 출력되는 값도 변경후 출력됨을 확인할 수 있다.

💕 위 내용은 인프런의 Vue.js 시작하기 - Age of Vue.js 를 참고하여 공부하며 개인적으로 정리한 내용입니다.
내용에 오류가 있거나 문제 사항은 댓글로 남겨주시면 감사하겠습니다!

반응형