ABOUT ME

Today
Yesterday
Total
  • Vue의 slot에 대해
    Vue.js 2022. 1. 2. 23:22

    부모 컴포넌트가 자식 컴퍼넌트에 데이터를 보내는 방법이 크게 두 가지인데,

     

    하나가 props이고 다른 하나가 slot이다.

     

    props는 자식 컴포넌트의 script로 보내 script안에서나 html에서나 자유롭게 사용할 수 있지만,

     

    slot은 자식 컴포넌트의 html에밖에 보낼 수 없다.

     

     

    그래서 사용 빈도는 좀 떨어지지만 간편하게 자식 컴포넌트에 데이터를 보낼 때 가끔 사용한다.

     

    사용법은 간단하다.

     

    부모 컴포넌트에서 자식 컴포넌트의 태그 사이에 원하는 데이터(태그, 변수 등)를 넣어주면된다.

     

    <ChildComponent>

        보내고싶은 태그와 데이터를 넣는다.

         ex) {{ data1 }}

     

         또는

     

         <span>{{ data2 }}</span>

    </ChildComponent>

     

    그리고 자식 컴포넌트에서 받고자하는 부분에

     

    <slot></slot>

     

    이렇게 해주면 끝.

     

     

    근데 보내고싶은 slot이 다수일 때는,

     

    <ChildComponent>

        <template v-slot:a>{{ data }}</template>

    </ChildComponent>

     

    이렇게 v-slot에 이름을 작명해서 보내면

     

    <slot name="a"></slot>

     

    이렇게 일치하는 이름으로 데이터를 받을 수 있다.

     

    이 방법은 Named slot이라고 부른다.

     

     

     

    반대로 자식 컴포넌트에서 부모 컴포넌트로 데이터를 보낼 수 있다.

     

    자식 컴포넌트에서 

     

    <slot :dataFoo="dataFoo"></slot>

     

    이렇게 이름을 작명해서 보내면

     

    <ChildComponent>

        <template v-slot:default="dataFromChild">{{ dataFromChild.dataFoo }}</template>

    </ChildComponent>

     

    이렇게 받을 수 있는데, 자식 컴포넌트에서 오는 데이터들은 하나의 객체에 묶여서 오게된다.

     

    따라서 default에 그 객체 이름을 작명해주고

     

    {{  }} 사이에 객체 이름.자식 컴포넌트에서 보낸 slot :이름 으로 적어주면 

     

    자식 컴포넌트에서 부모 컴포넌트로 전송된다.

     

    이 방식은 Slot props라고하는데 별로 쓸일은 없다고한다.

Designed by Tistory.