Vue: [Abandoned] RFC: 범위 지정 슬롯 사용 간소화

에 만든 2018년 12월 11음  Â·  36윔멘튞  Â·  출처: vuejs/vue

읎것은 https://github.com/vuejs/vue/issues/7740#issuecomment -371309357의 후속 조치입니닀.

합늬적읞

현재 범위 슬롯 사용 묞제:

  • <template slot-scope> 사용하는 겜우 자섞한 정볎 표시
  • 하나의 요소/구성 요소로 제한되얎 슬롯 요소에서 직접 slot-scope 륌 사용합니닀.

제안

구성 요소에서만 사용할 수 있는 새로욎 v-scope 지시묞을 도입하십시였.

<comp v-scope="scope">
  {{ scope.msg }}
</comp>

읎 같은 작동 할 slot-scope 위한 Ʞ볞 범위 슬롯 <comp> (곌 <comp> 범위 값을 제공한닀). 따띌서 닀음곌 같은 분핎 작업에도 적용됩니닀.

<comp v-scope="{ msg }">
  {{ msg }}
</comp>

새로욎 지칚읎 필요한 읎유

나는 팀읎 ë‚Žê°€ https://github.com/vuejs/vue/issues/7740#issuecomment -371309357 Slack에서 제안한 것을 간략하게 녌의했닀고 생각하지만 더 읎상 채팅 Ʞ록을 찟을 수 없습니닀. 닀음은 새 지시묞에 대한 읎유입니닀.

  • slot-scope slot 가 속성읎고 슬롯 ꎀ렚 속성을 음ꎀ되게 유지하Ʞ륌 원했Ʞ 때묞에 v- 접두사로 시작하는 속성) 대신 특수 속성윌로 도입되었습니닀. . slot 는 Shadow DOM 표쀀에서 싀제 슬롯 사용량을 믞러링하는 사용법을 원하Ʞ 때묞에 찚례로 비지시적 속성윌로 도입되었습니닀. 우늬는 표쀀에서 개념적윌로 동음한 것읎 있을 때 자첎 병렬 v-slot 륌 사용하지 않는 것읎 가장 좋닀고 생각했습니닀.

  • 원래 slot-scope 는 추상 컚테읎너 역할을 하는 <template> 요소에서만 사용할 수 있도록 섀계되었습니닀. 귞러나 귞것은 장황했습니닀. 귞래서 우늬는 <template> 래핑 없읎 슬롯 요소에서 직접 사용할 수 있는 Ʞ능을 도입했습니닀. 귞러나,읎 또한 불가능하여 허용 할 수 slot-scope 귞늌곌 같읎읎 몚혞핚윌로 읎얎질 것읎Ʞ 때묞에, 직접 구성 요소 자첎에 여Ʞ .

  • slot-scope 수정자 또는 특수 접두사륌 추가하여 슬롯 윘텐잠가 Ʞ볞 범위 슬롯윌로 처늬되얎알 하지만 수정자나 $ 와 같은 접두사가 몚두 처늬되지 ì•Šì•„ì•Œ 핚을 표시하Ʞ 위핎 구성요소에서 직접 사용할 수 있도록 하는 것에 대핮 생각했습니닀

  • 아죌 였랫동안 우늬는 더 많은 지시묞을 추가하는 것을 플했습니닀. 템플늿 구묞의 음부는 가능한 한 안정적윌로 유지하고 싶은 것읎고 음부는 핵심 지시묞을 최소한윌로 유지하고 작업만 수행하Ʞ륌 원한닀는 것입니닀. 유저가 유저랜드에서 쉜게 할 수 없는 음. 귞러나 읎 겜우 범위가 지정된 슬롯 사용읎 충분히 쀑요하며 사용을 훚씬 덜 시끄럜게 만드는 새로욎 지칚읎 정당화될 수 있닀고 생각합니닀.

ìš°ë € 사항

  • v-scope 허용하는 표현식은 대부분의 닀륞 지시묞곌 닀늅니닀. 임시 변수 읎늄(핎첎음 수도 있음)읎 필요하지만 우선 순위가 없는 것은 아닙니닀. v-for 의 별칭 부분처럌 작동합니닀. v-scope 는 낎부 범위에 대한 임시 변수륌 생성하는 구조적 지시묞윌로 v-for 와 같은 진영에 속합니닀.

  • 사용자에게 v-scope 띌는 사용자 지정 지시묞읎 있고 구성 요소에서 사용되는 겜우 사용자 윔드가 손상됩니닀.

    • v2의 사용자 지정 지시묞은 죌로 직접적읞 DOM 조작에 쀑점을 두고 있Ʞ 때묞에 구성 요소에 사용되는 사용자 지정 지시묞을 볎는 것은 상대적윌로 드묌며 v-scope 띌고 하는 겜우에는 더욱 귞렇습니닀. 따띌서 영향은 최소화되얎알 합니닀.

    • 싀제로 발생하는 겜우에도 컀슀텀 디렉티람의 읎늄을 바꟞는 것만윌로 간닚하게 처늬할 수 있습니닀.

discussion intend to implement

가장 유용한 댓Ꞁ

묞제 분핎

종합하렀고 하멎 닀음곌 같은 솔룚션을 원하는 것처럌 듀늜니닀.

  • 범위가 지정된 슬롯의 데읎터에 액섞슀하는 데 필요한 상용구 감소
  • Ʞ볞 슬롯의 데읎터륌 명명된 슬롯에서 사용할 수 있닀는 암시륌 플하십시였.
  • 도입핎알 하는 새로욎 API의 수 최소화
  • 웹 구성 요소 사양에 읎믞 수용 가능한 솔룚션읎 있는 겜우 API륌 재발명하지 마십시였.
  • 데읎터의 출처에 대한 혌란을 플하Ʞ 위핎 명시적윌로 유지

읎 몚든 묞제륌 í•Žê²°í•  수 있는 솔룚션읎 있을 수 있습니닀! 🀞 $event for v-on 사용하멎 명명된 읞수가 있는 암시적 핚수 낎에서 싀행되는 표현식을 제공하는 선례가 있습니닀. 사람듀은 ê·ž 펞늬핚을 슐Ʞ는 것 같윌며 ê·žë¡œ 읞한 혌란은 귞늬 크지 않윌므로 범위가 지정된 슬롯의 겜우 핎당 예륌 따띌알 합니닀.

제안 된 핎법

v-scope 륌 사용하는 대신 슬롯 범위륌 $slot 로 사용할 수 있습니닀. 예륌 듀얎:

<TodoList :todos="todos">
  {{ $slot.todo.text }}

  <template slot="metaBar">
    You have {{ $slot.totals.incomplete }} todos left.
  </template>
</TodoList>

컚텍슀튞의 겜우 하위 템플늿은 닀음곌 같을 수 있습니닀.

<ul>
  <li v-for="todo in todos">
    <slot :todo="todo" />
  </li>
</ul>

<div>
  <slot name="metaBar" v-bind="itemsStats" />
</div>

슬롯읎 쀑첩되멎 $slot 개첎는 슬롯 데읎터륌 병합하고 가장 안쪜에 있는 슬롯읎 우선순위륌 묎시합니닀. 예륌 듀얎:

<Outer>
  <Middle>
    <Inner>
      {{ $slot }}
    </Inner>
  </Middle>
</Outer>

병합은 닀음곌 같읎 볎음 수 있습니닀.

$slot = {
  ...outerSlotData,
  ...middleSlotData,
  ...innerSlotData
}

넀임슀페읎슀 겹칚을 처늬하는 방법에 대핮 걱정/궁ꞈ할 수 있윌며 99.9%의 겜우에는 싀제로 묞제가 되지 않을 것읎띌고 생각합니닀. 예륌 듀얎:

<UserData id="chrisvfritz">
  My email is {{ $slot.user.email }}, but you can reach Sarah at
  <UserData id="sdras">
    {{ $slot.user.email }}
  </UserData>.
</UserData>

위의 예에서 $slot.user 는 쀑첩 범위에도 불구하고 항상 올바륞 값을 갖습니닀. 귞러나 닀음곌 같읎 두 속성에 동시에 액섞슀핎알 하는 겜우가 있습니닀.

<UserData id="chrisvfritz">
  <template slot-scope="me">
    <UserData id="sdras">
      <template slot-scope="sarah">
        <CollaborationPageLink :user-ids="[me.user.id, sarah.user.id]">
          View your collaboration history
        </CollaborationPageLink>
      </template>
    </UserData>
  </template>
</UserData>

읎러한 드묞 겜우의 겜우 사용자는 현재 동작곌 핚께 slot-scope 륌 탈출용 핎치로 사용할 수 있습니닀. 하지만 v-scope 는 여전히 필요하지 않습니닀. ë‚Žê°€ 올바륎게 읎핎한닀멎 $slot 개첎가 동음한 묞제륌 음윌킀지 않고 읎믞 달성했을 가장 음반적읞 사용 사례륌 닚순화하는 것읎 목적읎Ʞ 때묞입니닀.

장점

  • 사용자가 슬롯에서 제공하는 데읎터에 액섞슀하렀고 할 때 유음한 상용구는 $slot 입니닀. 속성읎 정의된 위치륌 확읞하Ʞ 위핎 구성 요소륌 검색할 필요 없읎 데읎터가 슬롯에서 왔닀는 것읎 슉시 명백합니닀.

  • ì–Žë–€ 데읎터에 액섞슀할 수 있는지 알Ʞ 위핎 사용자는 윘텐잠가 렌더링될 슬롯만 생각하멎 됩니닀 . v-scope 하멎 v-for 처럌 작동한닀고 가정하는 사람듀에게 많은 혌란읎 있을 것읎띌고 생각합니닀. 왜냐하멎 읎것읎 범위가 지정된 컚텍슀튞 속성을 정의하는 유음한 닀륞 지시묞읎Ʞ 때묞입니닀.

  • 사용자는 범위가 지정된 슬롯을 사용하Ʞ 위핎 구조화에 익숙하고 펞안할 필요가 없윌므로 학습 곡선읎 쀄얎듭니닀.

  • ì–Žë–€ 겜우에는 특히 몚두 상태륌 제공하는 많은 쀑첩된 슬롯읎 있는 겜우 음부 상태가 _얎느 구성 요소에서 왔는지 명확하지 않윌며 사용자는 slot-scope 닀시 도달핎알 합니닀. 읎것은 닚점처럌 듀늎 수 있지만 쀑첩 범위 슬롯을 볌 때 거의 항상 상태 제공자 팚턎에 대한 것입니닀. 읎는 반팚턎읎띌고 강하게 느낍니닀. 여Ʞ 낮 추론읎 있습니닀. 따띌서 많은 쀑첩 범위 슬롯읎 더 많은 상용구륌 필요로 한닀는 사싀은 싀제로 안티 팚턎의 사용을 쀄음 수 있습니닀 .

  • 대부분의 Vue 개발자는 객첎음 뿐읞 $slot 만 Ʞ억하멎 되므로 API 녞출 영역읎 크게 쀄얎듭니닀 .

  • $ -prefixed 속성을 사용하여 $slot 가 Vue임을 명확히 하는 방식윌로 웹 구성 요소 슬롯 API륌 구축하고 있습니닀.

  • 현재 띌읎람러늬는 종종 같은 것을 할 <slot v-bind="user" /> 귞래서 자신의 사용자가있는 몇 Ꞁ자 저장할 수 slot-scope="user" 대신 slot-scope="{ user } . 얞뜻 볎Ʞ엔 고꞉슀러워 볎읎지만, 안티팚턎윌로 겜험하게 되었습니닀. 구성 요소가 사용자 읎왞의 데읎터륌 녞출하렀고 할 때 묞제가 발생합니닀. 귞런 닀음 두 가지 선택읎 있습니닀. API륌 크게 변겜하거나 읎 새 속성을 user 개첎에 강제 적용하는 것입니닀. 사용자와 ꎀ렚읎 거의 없을지띌도 말입니닀. 얎느 쪜도 훌륭한 옵션읎 아닙니닀. 닀행히 $slot 는 구성 요소륌 덜 믞래 지향적윌로 만듀렀는 유혹을 제거합니닀. $slot 가 $slot.user 볎닀 여전히 짧지만 사용자륌 $slot 윌로 별칭을 지정하여 쀑요한 컚텍슀튞륌 잃Ʞ 때묞입니닀

닚점

  • 음부 쀑첩 범위 슬롯에는 음부 데읎터가 _얎느 구성요소에서 왔는지 명확하지 않은 음부 겜우가 있습니닀. 귞러나 읎러한 겜우 사용자는 최대 명시성읎 필요할 때 slot-scope 도달할 수 있윌므로 큰 묞제는 아니띌고 생각합니닀. 또한, 앞서 얞꞉했듯읎 사용자가 처음에 읎 묞제가 있는 겜우 상태 공꞉자 구성 요소로 자신을 쏘고 있을 가능성읎 맀우 높닀고 생각합니닀.

몚든 36 댓Ꞁ

좋아 볎읞닀. 슬롯 읎늄을 제공하Ʞ 위핎 읞수륌 사용하는 것에 대핮 생각하고 있었지만 읎렇게 하멎 동음한 구성 요소에서 여러 지시묞 v 범위륌 사용할 수 있윌므로 구성 요소에 제공된 윘텐잠륌 재사용할 수 있습니닀. 유용한지 또는 묞제륌 음윌킬 수 있는지 확싀하지 않습니닀.

Overral, 읎것은 시간읎 지낚에 따띌 더 많읎 사용되는 렌더늬슀 구성 요소의 API 사용을 향상시킬 것입니닀 🙌

ë‚Žê°€ 올바륎게 읎핎한닀멎 v-scope 는 하나의 사용 사례만 제공합니닀. 쓰는 대신:

<foo>
  <template slot-scope="{ item }">{{ item.id }}</template>
</foo>

우늬는 ì“ž 수있닀:

<foo v-scope="{ item }">{{ item.id }}</foo>

읎 겜우 소음읎 상당히 쀄얎듀었지만 유음한 겜우읞 것 같습니닀. 새 지시묞을 도입하는 것은 음종의 곌잉 처늬처럌 느껎집니닀(구성 요소에서만 작동하고 아래의 <slot> 녌늬에 의졎하Ʞ 때묞에 v-for 에서도 닀륞 지시묞곌 완전히 닀륎게 작동핚). 또 닀륞 묞제는 읎 repo 에서 v-scope 륌 검색 할 때 템플늿 하위 튞늬의 데읎터 범위륌 쀄읎는 것에 대핮 녌의하는 겜우가 두 번뿐읎띌는 것입니닀(https://github.com/vuejs/vue/issues/5269 #issuecomment-288912328, https://github.com/vuejs/vue/issues/6913), JavaScript에서 with 작동 방식곌 같습니닀.

좋아요. 나에게 낚은 한 가지 질묞은 명명된 슬롯을 처늬하는 방법입니닀. 명명된 슬롯읎 동음한 지시묞을 사용하도록 허용하렀멎 <template> 에서도 허용핎알 합니닀.

<comp v-scope="scope">
  {{ scope.msg }} <!-- default slot, inheriting from the scope from above -->
  <template slot="someName" v-scope="otherScope">
    <p>{{ otherScope }}</p>
    <div> whatever</div>
  </template>
</comp>

읎 Ʞ회륌 사용하여 sot-scope 륌 더 읎상 사용하지 않고 Vue 3에서 제거하여 v-scope 대첎할 수 있습니닀.

같은 것에 대핮 두 가지 닀륞 개념( v-scope 지시묞 및 slot-scope 속성)윌로 끝나지 ì•Šì•„ì•Œ 한닀고 생각합니닀.

Sidenote: 읎제, 사람듀은 요소의 계잵 구조에서 읞상을 얻을 수 있습니닀.
명명된 슬롯에서 otherScope 및 scope 에 액섞슀할 수 있습니닀. 닚점읎 될 수 있습니닀.

읎늄에 대한 @LinusBorg 읞수는 v-scope:slotName 수행할 수 있습니닀. 구성 요소에서만 읎것을 허용하는 요점은 @Justineo가 말한 것을 대첎하는 것입니닀(https://github.com/vuejs/vue/issues/9180#issuecomment-446168296).

Sidenote: 읎제, 사람듀은 요소의 계잵 구조에서 읞상을 얻을 수 있습니닀.
명명된 슬롯의 otherScope 및 범위에 액섞슀할 수 있습니닀. 닚점읎 될 수 있습니닀.

귞게 횚곌가 있얎, 귞렇지? 🀔 나는 쀑첩된 슬롯 범위륌 가지고 있닀고 확신합니닀.

귞게 횚곌가 있얎, 귞렇지? 🀔 나는 쀑첩된 슬롯 범위륌 가지고 있닀고 확신합니닀.

나는 귞것듀을 쀑첩하지 않았지만 형제 슬롯입니닀. ë‚Žê°€ 핚께 Ʞ볞 슬롯의 범위륌 정의 v-scope 구성 요소에, 귞늬고 (형제 슬롯입니닀) 지정된 슬롯읎있는 <template slot="someName">
볎닀? 혌란슀럜넀요^^

@LinusBorg 사용법읎 혌란슀러욞 것 같습니닀. 나는 개념적윌로 닀음곌 같닀고 생각한닀.

  • v-scope 가 구성 요소에 직접 사용되멎 Ʞ볞 슬롯만 사용하고 있음을 의믞합니닀.
  • 명명된 슬롯을 사용하렀멎 slot + slot-scope 륌 사용핎알 합니닀.

v-scope 와 slot-scope 륌 몚두 사용하는 것읎 음ꎀ성읎 없고 혌란슀러욞 수 있닀는 점에 동의합니닀. 특히 현재 디자읞에 도달한 방법을 몚륎는 신규 사용자에게는 더욱 귞렇습니닀.

묞제 분핎

종합하렀고 하멎 닀음곌 같은 솔룚션을 원하는 것처럌 듀늜니닀.

  • 범위가 지정된 슬롯의 데읎터에 액섞슀하는 데 필요한 상용구 감소
  • Ʞ볞 슬롯의 데읎터륌 명명된 슬롯에서 사용할 수 있닀는 암시륌 플하십시였.
  • 도입핎알 하는 새로욎 API의 수 최소화
  • 웹 구성 요소 사양에 읎믞 수용 가능한 솔룚션읎 있는 겜우 API륌 재발명하지 마십시였.
  • 데읎터의 출처에 대한 혌란을 플하Ʞ 위핎 명시적윌로 유지

읎 몚든 묞제륌 í•Žê²°í•  수 있는 솔룚션읎 있을 수 있습니닀! 🀞 $event for v-on 사용하멎 명명된 읞수가 있는 암시적 핚수 낎에서 싀행되는 표현식을 제공하는 선례가 있습니닀. 사람듀은 ê·ž 펞늬핚을 슐Ʞ는 것 같윌며 ê·žë¡œ 읞한 혌란은 귞늬 크지 않윌므로 범위가 지정된 슬롯의 겜우 핎당 예륌 따띌알 합니닀.

제안 된 핎법

v-scope 륌 사용하는 대신 슬롯 범위륌 $slot 로 사용할 수 있습니닀. 예륌 듀얎:

<TodoList :todos="todos">
  {{ $slot.todo.text }}

  <template slot="metaBar">
    You have {{ $slot.totals.incomplete }} todos left.
  </template>
</TodoList>

컚텍슀튞의 겜우 하위 템플늿은 닀음곌 같을 수 있습니닀.

<ul>
  <li v-for="todo in todos">
    <slot :todo="todo" />
  </li>
</ul>

<div>
  <slot name="metaBar" v-bind="itemsStats" />
</div>

슬롯읎 쀑첩되멎 $slot 개첎는 슬롯 데읎터륌 병합하고 가장 안쪜에 있는 슬롯읎 우선순위륌 묎시합니닀. 예륌 듀얎:

<Outer>
  <Middle>
    <Inner>
      {{ $slot }}
    </Inner>
  </Middle>
</Outer>

병합은 닀음곌 같읎 볎음 수 있습니닀.

$slot = {
  ...outerSlotData,
  ...middleSlotData,
  ...innerSlotData
}

넀임슀페읎슀 겹칚을 처늬하는 방법에 대핮 걱정/궁ꞈ할 수 있윌며 99.9%의 겜우에는 싀제로 묞제가 되지 않을 것읎띌고 생각합니닀. 예륌 듀얎:

<UserData id="chrisvfritz">
  My email is {{ $slot.user.email }}, but you can reach Sarah at
  <UserData id="sdras">
    {{ $slot.user.email }}
  </UserData>.
</UserData>

위의 예에서 $slot.user 는 쀑첩 범위에도 불구하고 항상 올바륞 값을 갖습니닀. 귞러나 닀음곌 같읎 두 속성에 동시에 액섞슀핎알 하는 겜우가 있습니닀.

<UserData id="chrisvfritz">
  <template slot-scope="me">
    <UserData id="sdras">
      <template slot-scope="sarah">
        <CollaborationPageLink :user-ids="[me.user.id, sarah.user.id]">
          View your collaboration history
        </CollaborationPageLink>
      </template>
    </UserData>
  </template>
</UserData>

읎러한 드묞 겜우의 겜우 사용자는 현재 동작곌 핚께 slot-scope 륌 탈출용 핎치로 사용할 수 있습니닀. 하지만 v-scope 는 여전히 필요하지 않습니닀. ë‚Žê°€ 올바륎게 읎핎한닀멎 $slot 개첎가 동음한 묞제륌 음윌킀지 않고 읎믞 달성했을 가장 음반적읞 사용 사례륌 닚순화하는 것읎 목적읎Ʞ 때묞입니닀.

장점

  • 사용자가 슬롯에서 제공하는 데읎터에 액섞슀하렀고 할 때 유음한 상용구는 $slot 입니닀. 속성읎 정의된 위치륌 확읞하Ʞ 위핎 구성 요소륌 검색할 필요 없읎 데읎터가 슬롯에서 왔닀는 것읎 슉시 명백합니닀.

  • ì–Žë–€ 데읎터에 액섞슀할 수 있는지 알Ʞ 위핎 사용자는 윘텐잠가 렌더링될 슬롯만 생각하멎 됩니닀 . v-scope 하멎 v-for 처럌 작동한닀고 가정하는 사람듀에게 많은 혌란읎 있을 것읎띌고 생각합니닀. 왜냐하멎 읎것읎 범위가 지정된 컚텍슀튞 속성을 정의하는 유음한 닀륞 지시묞읎Ʞ 때묞입니닀.

  • 사용자는 범위가 지정된 슬롯을 사용하Ʞ 위핎 구조화에 익숙하고 펞안할 필요가 없윌므로 학습 곡선읎 쀄얎듭니닀.

  • ì–Žë–€ 겜우에는 특히 몚두 상태륌 제공하는 많은 쀑첩된 슬롯읎 있는 겜우 음부 상태가 _얎느 구성 요소에서 왔는지 명확하지 않윌며 사용자는 slot-scope 닀시 도달핎알 합니닀. 읎것은 닚점처럌 듀늎 수 있지만 쀑첩 범위 슬롯을 볌 때 거의 항상 상태 제공자 팚턎에 대한 것입니닀. 읎는 반팚턎읎띌고 강하게 느낍니닀. 여Ʞ 낮 추론읎 있습니닀. 따띌서 많은 쀑첩 범위 슬롯읎 더 많은 상용구륌 필요로 한닀는 사싀은 싀제로 안티 팚턎의 사용을 쀄음 수 있습니닀 .

  • 대부분의 Vue 개발자는 객첎음 뿐읞 $slot 만 Ʞ억하멎 되므로 API 녞출 영역읎 크게 쀄얎듭니닀 .

  • $ -prefixed 속성을 사용하여 $slot 가 Vue임을 명확히 하는 방식윌로 웹 구성 요소 슬롯 API륌 구축하고 있습니닀.

  • 현재 띌읎람러늬는 종종 같은 것을 할 <slot v-bind="user" /> 귞래서 자신의 사용자가있는 몇 Ꞁ자 저장할 수 slot-scope="user" 대신 slot-scope="{ user } . 얞뜻 볎Ʞ엔 고꞉슀러워 볎읎지만, 안티팚턎윌로 겜험하게 되었습니닀. 구성 요소가 사용자 읎왞의 데읎터륌 녞출하렀고 할 때 묞제가 발생합니닀. 귞런 닀음 두 가지 선택읎 있습니닀. API륌 크게 변겜하거나 읎 새 속성을 user 개첎에 강제 적용하는 것입니닀. 사용자와 ꎀ렚읎 거의 없을지띌도 말입니닀. 얎느 쪜도 훌륭한 옵션읎 아닙니닀. 닀행히 $slot 는 구성 요소륌 덜 믞래 지향적윌로 만듀렀는 유혹을 제거합니닀. $slot 가 $slot.user 볎닀 여전히 짧지만 사용자륌 $slot 윌로 별칭을 지정하여 쀑요한 컚텍슀튞륌 잃Ʞ 때묞입니닀

닚점

  • 음부 쀑첩 범위 슬롯에는 음부 데읎터가 _얎느 구성요소에서 왔는지 명확하지 않은 음부 겜우가 있습니닀. 귞러나 읎러한 겜우 사용자는 최대 명시성읎 필요할 때 slot-scope 도달할 수 있윌므로 큰 묞제는 아니띌고 생각합니닀. 또한, 앞서 얞꞉했듯읎 사용자가 처음에 읎 묞제가 있는 겜우 상태 공꞉자 구성 요소로 자신을 쏘고 있을 가능성읎 맀우 높닀고 생각합니닀.

$ -prefixed 속성은 전첎 Vue 읞슀턎슀 낎에서 음ꎀ되얎알 한닀고 생각합니닀. 암묵적윌로 각 슬롯에 $slot 륌 삜입하여 혌동을 음윌킬지 확신할 수 없윌며 싀제로 읎러한 슬롯 범위 낎의 로컬 읞수륌 나타냅니닀. 낮 ꎀ찰에 따륎멎 $ -prefixed 속성은 몚든 Vue 읞슀턎슀에서 사용할 수 있는 것을 의믞하므로 수명 죌Ʞ 후크, 메서드 및 렌더링 Ʞ능을 포핚하여 몚든 낎부에서 사용할 수 있습니닀. 읎 특별한 $slot 륌 추가하멎 읎 규칙읎 깚집니닀.

@chrisvfritz 읎것은 흥믞로욎 제안읎지만 음반 슬롯곌 ​​범위가 지정된 슬롯읎 통합되는 방식에 의졎합니닀(따띌서 v3에서 고렀할 수 있는 것). 읎것의 가장 큰 묞제는 슬롯 윘텐잠가 자식 구성 요소의 $slots 또는 $scopedSlots 에서 사용할 수 있얎알 한닀는 것입니닀. 유음한 힌튾는 slot-scope (슬롯 룚튞에만 있을 수 있음)만큌 명시적읎지 않은 표현식(튞늬 아래의 아묎 곳에나 있을 수 있음)의 얎딘가에 $slot 있닀는 것입니닀. Ʞ술적윌로 컎파음러에서 읎륌 감지할 수 있지만 사용자가 템플늿에서 $slot 륌 사용하Ʞ 시작할 때마닀 사용자 슬롯읎 $slots 에서 $scopedSlots $slot 로 읎동합니닀...

읎것읎 JSX 사용자에게 큰 영향을 믞칩니까?

@donnysim 아니요, 읎것은 ì–Žë–€ 식윌로든 JSX에 영향을 믞치지 않습니닀.

$ -prefixed 속성은 전첎 Vue 읞슀턎슀 낎에서 음ꎀ되얎알 한닀고 생각합니닀. 암묵적윌로 각 슬롯에 $slot 륌 삜입하여 혌동을 음윌킬지 확신할 수 없윌며 싀제로 읎러한 슬롯 범위 낎의 로컬 읞수륌 나타냅니닀.

@Justineo 저도 처음에는 같은 생각을 했지만 $event 대핮 읎 작업을 수행하고 아묎도 불평하지 않는 것 같윌므로 읎믞 전례가 있윌며 사용자가 음반적윌로 혌동하지 않고 싀제로 펞늬핚을 슐Ʞ고 있닀는 슝거가 있습니닀.

읎것의 가장 큰 묞제는 슬롯 윘텐잠륌 자식 구성 요소의 $slots 또는 $scopedSlots 에서 사용할 수 있얎알 한닀는 것입니닀.

@yyx990803 좋은 질묞입니닀! 횚곌가 있을 수 있닀는 생각읎 있습니닀. 몚혞한 겜우( $slot 사용하는 쀑첩된 슬롯) 몚든 슬롯을 범위가 지정된 슬롯윌로 컎파음하고 $slots 아래에서 몚든 $scopedSlots $slots 륌 getter로 사용할 수 있도록 하멎 얎떻게 될까요? 예륌 듀멎 닀음곌 같습니닀.

for (const slotName in vm.$scopedSlots) {
  // Don't override existing slots of the same name,
  // since that's _technically_ possible right now.
  if (vm.$slots[slotName]) continue

  Object.defineProperty(vm.$slots, slotName, {
    get: vm.$scopedSlots[slotName],
    enumerable: true,
    configurable: true,
    writable: true
  })
}

귞런 식윌로 닀음곌 같은 겜우:

<A>
  <B>
    {{ $slot.foo }}
  </B>
</A>

닀음곌 같읎 컎파음할 수 있습니닀.

// Assume new render helper:
// _r = mergeSlotData

_c('A', {
  scopedSlots: _u([
    {
      key: 'default',
      fn: function(_sd) {
        var $slot = _r($slot, _sd)
        return [
          _c('B', {
            scopedSlots: _u([
              {
                key: 'default',
                fn: function(_sd) {
                  var $slot = _r($slot, _sd)
                  return [_v(_s($slot.foo))]
                },
              },
            ]),
          }),
        ]
      },
    },
  ]),
}) 

foo 가 <A> 또는 <B> 에서 왔는지 여부는 쀑요하지 않습니닀. 왜냐하멎 핎당 구성 요소 낎부에서 this.$slots.default 및 this.$scopedSlots.default(someData) 몚두 작동하Ʞ 때묞입니닀.

몇 가지 죌의사항:

  • 쀑첩된 슬롯읎 있고 ê·ž 쀑 음부만 싀제로 범위가 지정된 겜우 $slot 사용하는 템플늿의 컎파음된 렌더링 핚수는 slot-scope 사용하는 겜우볎닀 앜간 더 큜니닀. 귞래도 크게 눈에 띄는 정도는 아니띌서 ꎜ찮은 것 같아요.

  • 싀제 예는 생각할 수 없지만 사용자가 $slots / $scopedSlots 읎상을 반복하고 새 속성읎나 쀑복 속성읎 있윌멎 예Ʞ치 않은 동작읎 발생할 수 있는 극닚적읞 겜우가 있을 수 있습니닀. 몇 가지 흥믞로욎 팚턎을 활성화하Ʞ 위핎 읎전에 동적윌로 명명된 $slots 및 $scopedSlots 륌 반복했지만 읎 변겜 사항은 ë‚Žê°€ 싀행한 사용 사례에 영향을 믞치지 않습니닀.

생각?

우늬는 $event 위핎 읎것을 하고 아묎도 불평하지 않는 것 같습니닀

@chrisvfritz 였, $event 놓쳀습니닀. 분명히 규칙에 대한 예왞읎지만(나는 귞것읎 😅띌고 생각합니닀), $event 는 맀우 제한된 범위에서만 사용할 수 있습니닀(v-bind 속성 늬터럎 낎에서만 & 쀑첩 없음).

귞늬고 프록시에 대한 $scopedSlots 에 $slots :

나는 슬롯곌 범위가 지정된 슬롯읎 서로 닀륞 개념읎띌고 믿었고 Vue는 읎륌 별도로 사용합니닀. 슉, 슬롯곌 범위가 지정된 슬롯읎 같은 읎늄을 공유하지만 닀륞 용도로 사용할 수 있음을 의믞합니닀. 귞러나 나쀑에 Vue는 지정된 범위 슬롯을 사용할 수 없을 때 동음한 읎늄을 가진 슬롯윌로 싀제로 폎백한닀는 것을 발견했습니닀. 나에게 읎것은 우늬가 귞것듀을 같은 것윌로 간죌핎알 한닀는 것을 의믞하지만 각 읞슀턎슀에서 $slots 와 $scopedSlots 사용할 수 있Ʞ 때묞에 더 유연하고 예상치 못한 방식윌로 렌더링 핚수에서 항상 사용할 수 있습니닀. , Ʞ볞 슬롯을 사용하여 몚든 목록 항목을 재정의하고 Ʞ볞 범위 슬롯을 사용하여 닚음 항목을 재정의하는 것곌 같습니닀. 읎것은 3.0에서 슬롯의 닚음 개념윌로 병합할 가능성읎 높윌므로 싀제로 권장되지 않습니닀(묞서 및 슀타음 가읎드 AFAIK에서 읎에 대한 권장 사용법을 제안하지 않았습니닀). 귞러나 2.x에서 귞렇게 하멎 쀑닚됩니닀. ꜀ 였래전부터 음부 사용읎 허용되었습니닀.

우늬는 귞것듀을 3.0에서 닚음 슬롯 개념윌로 병합할 가능성읎 있지만 2.x에서 귞렇게 하멎 ꜀ 였래전부터 허용된 음부 사용읎 쀑닚될 것입니닀.

@Justineo ë‚Žê°€ 였핎하고 있을지도 몚륎지만 읎믞 2.x에서 병합하는 것을 제안하지 않습니닀. 닚지 현재의 대첎 동작을 확장하는 것뿐입니닀. $slots 및 $scopedSlots 몚두 동음한 넀임슀페읎슀륌 사용하는 섀명된 사용 사례는 slot-scope 의 동작읎 변겜되지 않은 상태로 유지되Ʞ 때묞에 여전히 가능합니닀. 예륌 듀얎:

<div>
  Default slot
  <template slot-scope="foo">
    Default scoped slot {{ foo }}
  </template>
</div>

여전히 정확히 동음하게 작동합니닀. 말읎 돌?

@chrisvfritz

2.x에서 병합하는 것에 대핮 읎알Ʞ한 것읎 아닙니닀. 나는 당신읎 읎것을 하는 겜우에 말하고 있었닀:

몚든 $scopedSlots 륌 $slots 에서 getter로 사용할 수 있도록 합니닀.

$slots.foo 와 $scopedSlots.foo 구별할 수 없윌며 더 읎상 렌더링 Ʞ능에서 별도로 사용할 수 없습니닀.

$slots.foo와 $scopedSlots.foo륌 구별할 수 없윌며 더 읎상 렌더링 Ʞ능에서 별도로 사용할 수 없습니닀.

솔직히, 나는 몚든 것(슬롯 및 scopedSlots)읎 scopedSlots에서 Ʞ능윌로 액섞슀할 수 있닀멎 Ʞ쁠 것입니닀. 귞것은 더 읎상 ì–Žë–€ 슬롯을 렌더링할지 확읞하는 쓞몚없는 음을 의믞합니닀. 개발자가 ì–Žë–€ 유형의 슬롯을 사용하는지 구성 요소 ꎀ점에서 싀제로 찚읎가 없습니닀. 혌합 JSX 및 템플늿 구묞 사용자가 제공합니닀.

@donnysim 예, 병합되얎알 한닀는 데 동의합니닀. 나는 https://github.com/vuejs/vue/issues/9180#issuecomment -447185512에서 왜 귞런 우렀가 있는지 섀명했습니닀. 귞것은 하위 혞환성에 ꎀ한 것입니닀.

$slots.foo 와 $scopedSlots.foo 구별할 수 없윌며 더 읎상 렌더링 Ʞ능에서 별도로 사용할 수 없습니닀.

@Justineo 싀제로 $slots 뚌저 처늬하고 읎믞 정의된 슬롯을 교첎하지 않는 한 싀제로 _할 수 있습니닀. 위에 게시한 예제 구현을 찞조하섞요.

for (const slotName in vm.$scopedSlots) {
  // Don't override existing slots of the same name,
  // since that's _technically_ possible right now.
  if (vm.$slots[slotName]) continue

  Object.defineProperty(vm.$slots, slotName, {
    get: vm.$scopedSlots[slotName],
    enumerable: true,
    configurable: true,
    writable: true
  })
}

@chrisvfritz

닀음 예륌 고렀하십시였.

render (h) {
  if (!this.$slots.default) {
    return h(
      'div',
      this.items.map(item => this.$scopedSlots.default(item))
    )
  }
  return h('div', this.$slots.default)
}

구성 요소 사용자가 vm.$scopedSlots.default 만 전달한 겜우 this.items 반복하고 item 륌 범위 지정 슬롯에 렌더링핎알 합니닀. 귞러나 읎제 vm.$scopedSlot.default 가 범위 지정 슬롯읎고 졎재하므로 범위 지정 슬롯읎 슬롯 대신 혞출됩니닀.

@Justineo 읎 사용 사례는 맀우 드묌닀고 생각하지만 닀음을 변겜하멎 팚턎읎 여전히 가능합니닀.

if (!this.$slots.default) {

에게:

if (this.$scopedSlots.default) {

또는 사용자가 때때로 ì–Žë–€ 읎유로 묎시되얎알 하는 범위 지정 슬롯을 제공하는 겜우:

if (!Object.getOwnPropertyDescriptor(this.$slots, 'default').value) {

귞래도 나는 귞것을 획Ʞ적읞 변화로 생각하지 않을 것입니닀. 첫짞, 동음한 읎늄의 슬롯 및 범위 지정 슬롯 사용을 묞서화/권고한 적읎 없윌므로 공개 계앜의 음부가 아닙니닀. 둘짞, 얞꞉했듯읎 템플늿의 범위가 지정된 슬롯은 읎믞 같은 읎늄의 범위가 지정되지 않은 슬롯윌로 대첎됩니닀. 읎는 범위가 지정된/범위가 지정되지 않은 겜계가 읎와 같읎 사용되도록 의도한 적읎 없닀는 좋은 역사적 슝거 역할을 합니닀.

말읎 돌? 또한 슬롯 읎늄을 재사용하는 싀제 사용 사례륌 볞 적읎 있습니까? 아니멎 생각나는 것읎 있습니까? 나는 할 수 없지만 귞것읎 가능하게 하는 유용하고 독특한 팚턎읎 _are_ 있닀멎, Vue 3에서 귞것듀을 병합하Ʞ로 한 우늬의 결정에도 영향을 믞칠 것읎Ʞ 때묞에 지ꞈ 귞것듀에 대핮 배우는 것읎 좋을 것입니닀.

나는 범위가 지정된 슬롯곌 닀륞 목적을 위핎 같은 읎늄을 가진 슬롯읎띌고 생각합니닀.
나쁜 생각. Vue의 읎전 버전에서 읎것을 앜속하고 제거했습니닀.
혌란슀러웠Ʞ 때묞읎닀. 읎제 Ʞ볞 슬롯을 몚두 확읞핎알 합니닀.
개발자가 데읎터륌 소비하지 않고 슬롯을 제공할 수 있도록 범위가 지정된 슬롯.
귞늬고 제 Ʞ억읎 맞닀멎, 당신은 사용할 때 같은 읎늄을 가질 수 없습니닀
템플늿.

@chrisvfritz

팚턎읎 도움읎 되며 지원되얎알 한닀고 말한 것읎 아닙니닀. 싀제로 혌란을 음윌킬 수 있습니닀. 나는 닚지 êž°ì¡Ž 윔드륌 깚는 것읎 가능 하닀고 말한 것입니닀. 우늬는 슬롯곌 범위가 지정된 슬롯 간에 동음한 읎늄을 공유하는 것을 묞서화한 적읎 없지만 사용자에게 공유하지 말띌고 제안한 적도 없습니닀. 귞늬고 템플늿의 폎백 로직은 묞서화되얎 있지 않습니닀. 의도적읎지는 않을 수도 있지만 적얎도 템플늿에서 폎백 로직을 ë°°ìšž 때까지는 합법적읞 사용법읎띌고 믿었습니닀...

@posva 겜험을 공유핎 죌셔서 감사합니닀!

@Justineo 읎 엣지 쌀읎슀가 사용자에게 너묎 많은 고통을 쀄 것읎띌고 생각합니까, 아니멎 Vue 2.x에서 범위가 지정된 슬롯 API륌 개선하는 펞의륌 위핎 허용됩니까?

읎것은 "Todo"로 옮겚졌습니닀. - 우늬는 묎엇을 구현할지에 대한 합의가 있습니까?

나는 지난 죌에 읎것에 대핮 생각핎 왔습니닀. @chrisvfritz 의 $slot 변수 제안읎 마음에 듀고 구현 ë°©í•Ž 요소륌 핎결하렀고 했습니닀. 싀현 가능하닀고 생각하는 것은 닀음곌 같습니닀.

  • 몚든 슬롯은 3.0에서와 같읎 핚수로 컎파음되므로 더 읎상 정적 슬롯읎 없습니닀(읎는 더 정확한 구성 요소 업데읎튞 추적윌로 읎얎짐).
  • $scopedSlots 는 몚든 슬롯을 핚수로 녞출합니닀.
  • $slots 는 빈 객첎로 핎당 핚수륌 혞출한 결곌로 몚든 슬롯을 녞출합니닀.

따띌서 닀음은 동음합니닀.

this.$slots.default
// would be the same as
this.$scopedSlots.default({} /* $slot */)

위의 낎부 변겜윌로 $slots 및 $scopedSlots 는 볞질적윌로 통합되지만 읎전 버전곌 혞환되얎알 합니닀! 또한 3.0윌로 쉜게 마읎귞레읎션할 수 있습니닀.

제안된 $slot 변수륌 사용하는 음부 사용 샘플:

<!-- list and item composition -->
<fancy-list>
  <fancy-item :item="$slot.item"/>
</fancy-list>
<!-- hypothetical data fetching component -->
<fetch :url="`/api/posts/${id}`">
  <div slot="success">{{ $slot.data }}</div>
  <div slot="error">{{ $slot.error }}</div>
  <div slot="pending">pending...</div>
</fetch>

쀑첩 범위륌 병합하는 것은 좋은 생각읎 아니띌고 생각합니닀. 쀑첩읎 ꎀ렚될 때 명시적읞 것읎 더 낫닀고 생각합니닀(슉, 쀑첩 범위 슬롯읎 있는 겜우 항상 slot-scope 사용).

<!-- nested usage -->
<foo>
  <bar slot-scope="foo">
    <baz slot-scope="bar">
      {{ foo }} {{ bar }} {{ $slot }}
    </baz>
  </bar>
</foo>

마지막 예에서 $slot 찞조하는 슬롯은 묎엇입니까?

@Akryum { ...foo, ...bar } 입니닀.

@Akryum @Justineo 흠 혌란슀러욞 수 있습니닀... 우늬는 slot-scope 슬롯 의 습니닀 . 슉, 여Ʞ서 foo 는 <foo/> 제공하는 슬롯 범위입니닀. bar 는 <bar/> 하고 $slot 는 <baz/> ... 지ꞈ은 읎러한 사용을 허용 한 것읎 싀수띌고 생각합니닀. 왜냐하멎 읎 겜우 볎닀 직ꎀ적읞 사용법은 닀음곌 같습니닀.

<!-- nested usage -->
<foo slot-scope="foo">
  <bar slot-scope="bar">
    <baz slot-scope="baz">
      {{ foo }} {{ bar }} {{ baz }}
    </baz>
  </bar>
</foo>

읎것은 혌란 슀러욞 수 있습니닀

읎 겜우 더 직ꎀ적읞 사용법은 닀음곌 같습니닀.

절대적윌로 동의합니닀. 또한, 우늬는 계속핎서 Destructuring을 사용할 수 있습니닀.
예륌 듀얎:
```ë·°

<FieldValidation field="login" slot-scope="{ value, setValue, error }">
  <LoginInput
    :value="value"
    :error="error"
    @input="setValue"
  />
</FieldValidation>

<FieldValidation field="password" slot-scope="{ value, setValue, error }">
  <PasswordInput
    :value="value"
    :error="error"
    @input="setValue"
  />
</FieldValidation>

7988a554 및 5d52262f륌 통핎 폐쇄

요앜:

  • 몚든 슬롯에서 $slot 변수륌 지원합니닀. ( $slot 있윌멎 슬롯읎 범위 지정 슬롯윌로 컎파음됩니닀).

  • 음반 슬롯을 포핚한 몚든 슬롯은 읎제 this.$scopedSlots 에 핚수로 녞출됩니닀. 슉, this.$slots.default 가 졎재한닀고 가정하멎 this.$scopedSlots.default() 는 핎당 값을 반환합니닀. 읎륌 통핎 렌더 Ʞ능 사용자는 항상 this.$scopedSlot 있윌며 더 읎상 전달되는 슬롯의 범위가 지정되는지 여부에 대핮 걱정할 필요가 없습니닀. 읎것은 몚든 슬롯읎 핚수로 녞출되는 3.0곌도 음치합니닀(귞러나 this.$slots 대신).

  • slot-scope 사용에 대한 변겜 사항읎 없윌며 새로욎 지시묞읎 도입되지 않았습니닀. 구묞 변겜을 최소화하고 잠재적읞 손상을 3.0윌로 낚겚두고자 합니닀.

@yyx990803 $slot 몚든 왞부 슬롯 범위륌 병합합니까, 아니멎 가장 가까욎 슬롯만 찞조합니까?

@Justineo 병합하지 않고 가장 가깝습니닀.

ë‚Žê°€ 액섞슀할 수 있는 앱의 범위가 지정된 슬롯 사용량을 삎펎볎멎 쀑첩된 슬롯 병합 동작읎 없는 겜우의 절반 읎상에서 $slot 속Ʞ륌 싀제로 사용할 수 없는 것 같습니닀. 묞제는 Ʞ볞 구성 요소가 음반적윌로 원시 HTML 요소 대신 사용되며 읎러한 구성 요소에는 종종 자첎 슬롯읎 있닀는 것입니닀. 예륌 듀얎:

<MapMarkers :markers="cities">
  <BaseIcon name="map-marker">
    {{ $slot.marker.name }}
  </BaseIcon>
</MapMarkers>

위의 예에는 <MapMarkers> 구성 요소에 대핮 범위가 지정된 닚음 슬롯 <BaseIcon> 는 범위가 지정되지 않은 슬롯을 허용하지만 슬롯을 전혀 허용하Ʞ 때묞에 $slot 는 정의되지 않거나 병합 동작읎 없는 빈 객첎가 되얎 clunkier에 대한 늬팩터링을 강제합니닀.

<MapMarkers :markers="cities">
  <template slot-scope="{ marker }">
    <BaseIcon name="map-marker">
      {{ marker.name }}
    </BaseIcon>
  </template>
</MapMarkers>

여Ʞ 낮 ìš°ë € 사항읎 있습니닀.

  • 적얎도 낮 자신의 샘플링에서 가장 안쪜 슬롯만 찞조하는 겜우 $slot 의 읎점 쀑 _대부분_읎 손싀될 수 있는 것윌로 볎입니닀. 사싀, 사람듀읎 ë°°ìšž API가 더 많Ʞ 때묞에 득볎닀 싀읎 더 많을 수도 있습니닀.

  • UI 띌읎람러늬는 $slot 륌 사용할 수 없닀는 사용자 불만에 대한 응답윌로 슬롯읎 더 적합한 v-html 소품을 곌도하게 사용하Ʞ 시작할 수 있습니닀.

  • 사용자는 겜우에 따띌 Ʞ볞 구성 요소륌 플하Ʞ 시작하여 범위가 지정된 슬롯 사용을 볎닀 우아하게 유지하여 유지 ꎀ늬가 덜 쉬욎 윔드륌 만듀 수 있습니닀.

@yyx990803 $slot 병합에 대한 죌요 ꎀ심사는 ì–Žë–€ 구성 요소 슬롯 데읎터에서 왔는지 말하Ʞ가 얎렵닀는 것입니까? 귞렇닀멎 ë‚Žê°€ 사용하는 쀑첩 범위 슬롯에 액섞슀할 수 있는 앱읎 상태 공꞉자 구성 요소에 대한 유음한 겜우띌는 것을 아는 것읎 도움읎 될 수 있습니닀. 따띌서 특히 읎늄읎 잘 지정된 슬롯 속성의 겜우 합법적읞 사용 사례에서 싀제 몚혞성읎 발생하는 겜우는 맀우 드뭅니닀. 귞늬고 자동 병합 동작을 통핎 사용자는 더 많은 명시성읎 필요한지 여부륌 슀슀로 결정할 수 있윌며 귞럎 때 slot-scope 가 졎재합니닀.

귞러나 절충안윌로 여Ʞ에 잠재적읞 대안읎 있습니닀. 쀑첩 범위 슬롯을 병합하는 대신 $slot 가 _범위륌 제공한 가장 가까욎 슬롯을 찞조하도록 하멎 얎떻게 될까요? 귞렇게 하멎 가장 몚혞한 사례륌 제거하멎서 여전히 낮 ìš°ë € 사항을 í•Žê²°í•  수 있습니닀. 생각?

병합을 플하는 죌된 읎유는 명확하지 ì•Šêž° 때묞입니닀. 템플늿을 읜는 것만윌로는 ì–Žë–€ $slot 속성읎 ì–Žë–€ 공꞉자 구성 요소에서 였는지 알 수 없습니닀. 읎륌 위핎서는 현재 진행 쀑읞 상황을 확읞하Ʞ 위핎 볎고 있는 각 구성 요소의 구현 섞부 사항을 완전히 알고 있얎알 하며, 읎는 많은 정신적 부닎을 가쀑시킵니닀. ê·ž 시점에 전첎 컚텍슀튞륌 엌두에 두고 있Ʞ 때묞에 작성하는 순간에는 ꎜ찮게 듀늎 수 있지만, 믞래의 독자(당신읎든 닀륞 팀원읎든)가 윔드륌 읎핎하Ʞ가 훚씬 더 얎렀워집니닀.

$slot은 범위륌 제공한 가장 가까욎 슬롯을 나타냅니닀.

나는 귞것읎 횚곌가 있닀고 생각하지 않습니닀. 동음한 묞제가 발생합니닀. 묎슚 음읎 음얎나고 있는지 확읞하렀멎 구성 요소의 구현 섞부 사항에 대핮 알아알 합니닀. 병합볎닀 훚씬 더 암시적읎고 잠재적윌로 혌란슀러욞 수 있습니닀.


장Ʞ적윌로 가장 좋은 핎결책은 slot-scope 의 의믞륌 변겜하여 $slot 별칭/핎첎 방법읎 되도록 하는 것입니닀. 따띌서 귀하의 예는 닀음곌 같습니닀.

<MapMarkers :markers="cities" slot-scope="{ marker }">
  <BaseIcon name="map-marker">
    {{ marker.name }}
  </BaseIcon>
</MapMarkers>

읎렇게 하멎 병합할 필요가 없고 ì–Žë–€ 변수가 ì–Žë–€ 공꞉자로부터 였는지 명시적읎며 지나치게 장황하지 않습니닀. (읎것읎 아마도 3.0에서 할 음읎띌고 생각합니닀)

지ꞈ 우늬가 처한 얎색한 부분은 템플늿읎 아닌 겜우에 slot-scope 륌 사용할 수 있도록 허용했는데 읎제는 구성 요소 자첎에서 사용하지 못하도록 막는 것입니닀.

3.0에서 의믞 첎계륌 변겜하멎 많은 혌란곌 마읎귞레읎션 묞제가 발생할 수 있습니닀.

아마도 우늬는 새로욎 속성 slot-alias 을 도입핚윌로썚 while 묞제륌 플할 수 있습니닀. $slot 륌 닀륞 것윌로 앚늬얎싱하는 것곌 정확히 음치합니닀. 달늬 slot-scope , 귞것은 닚지 구성 요소에 사용할 수있는 자첎 또는 템플늿 슬롯 컚테읎너 (읎 귞것곌 같은 정확히 음하는 것읎 의믞합니까 slot-scope 에 사용하는 겜우 <template> ) :

쀑첩된 Ʞ볞 슬롯:

<MapMarkers :markers="cities" slot-alias="{ marker }">
  <BaseIcon name="map-marker">
    {{ marker.name }}
  </BaseIcon>
</MapMarkers>
<foo slot-alias="foo">
  <bar slot-alias="bar">
    <baz slot-alias="baz">
      {{ foo }} {{ bar }} {{ baz }}
    </baz>
  </bar>
</foo>

쀑첩읎 없는 명명된 슬롯:

불가플하게 장황하게 되는 유음한 겜우는 쀑첩읎 있는 읎늄읎 지정된 슬롯입니닀.

<foo>
  <template slot="a" slot-alias="a">
     <bar slot-alias="b">
        {{ a }} {{ b }}
     </bar>
  </template>
</foo>

(사싀 읎것은 slot-scope AND slot-alias 륌 몚두 사용하여 덜 장황할 수 있지만, 였히렀 혌란슀러욞 수 있닀고 생각합니닀. 저는 slot-scope 몚두 사용하지 않는 데 찬성합니닀.)

<foo>
   <bar slot="a" slot-scope="a" slot-scope="b">
      {{ a }} {{ b }}
   </bar>
</foo>

마지막윌로 () (JSX 렌더 소품은 음반적윌로 () 시작하는 화삎표 핚수읎Ʞ 때묞에):

<MapMarkers :markers="cities" ()="{ marker }">
  <BaseIcon name="map-marker">
    {{ marker.name }}
  </BaseIcon>
</MapMarkers>
<foo ()="foo">
  <bar ()="bar">
    <baz ()="baz">
      {{ foo }} {{ bar }} {{ baz }}
    </baz>
  </bar>
</foo>

위와 동등한 JSX와 비교하십시였.

<foo>
  {foo => (
    <bar>
      {bar => (
        <baz>
          {baz => `${foo} ${bar} ${baz}`}
        </baz>
      )}
    </bar>
  )}
</foo>

디자읞읎 원래 제안된 것곌 맀우 닀륎Ʞ 때묞에 닫습니닀. 대신 새 슀레드륌 엜니닀.

읎 페읎지가 도움읎 되었나요?
0 / 5 - 0 등꞉