在Svelte 3中迭代插槽(儿童)

Leo*_*one 3 svelte

我想包装自定义组件的所有插槽。但是我无法遍历插槽。我的自定义组件用法如下:

<Tab>
    <span slot="header">Tab Header 1</span>
    <span slot="header">Tab Header 2</span>
    <span slot="header">Tab Header 3</span>

    ... maybe other slots that are not "header"
</Tab>
Run Code Online (Sandbox Code Playgroud)

然后里面Tab.svelte

{#each ?? as slot}
    <a class="tab-item">
        <each-slot />
    </a>
{/each}
Run Code Online (Sandbox Code Playgroud)

在上面,我试图遍历名为“ header”的子项/插槽,并用锚标记将它们包裹起来。我怎样才能做到这一点?

编辑:我不想像这样传递javascript对象:

{#each ?? as slot}
    <a class="tab-item">
        <each-slot />
    </a>
{/each}
Run Code Online (Sandbox Code Playgroud)

Ric*_*ris 5

无法遍历插槽。执行描述的一种更简单的方法是使用上下文API使选项卡及其面板协同工作。

Here's an example of what I'm talking about — we should probably get round to tidying this up and making it available as an npm package, but hopefully it's a good enough base to build upon in its current state.

  • 上下文不能解决一般情况,我也遇到了这种情况。有时,父级需要能够包装任意元素列表。例如,我正在构建一个网格组件,该组件需要将其所有子组件包装在单元元素中,该单元元素应用一些CSS来使内容在单元中居中。 (2认同)
  • 使用对象可确保只有引用“TABS”的组件才能获取或设置该上下文。如果您使用像“TABS”这样的字符串,那么任何组件都可以访问它,这可能会导致冲突或恶作剧。这不太可能,但出于这个原因,使用“{}”被推广为最佳实践 (2认同)