首页 > web前端 > js教程 > 来自 Svelte o Svelte Understanding Slots(默认和命名)

来自 Svelte o Svelte Understanding Slots(默认和命名)

Linda Hamilton
发布: 2024-12-27 17:26:11
原创
219 人浏览过

From Svelte o Svelte Understanding Slots (default and named)

Svelte 5 中有很多可能令人困惑的变化,这就是为什么我试图记录我从 Svelte 4 到 Svelte 5 的学习过程。
其中之一是在 Svelte 5 中使用插槽。在

默认插槽

Parent.svelte(默认插槽,svelte 4)

<Child>
<div>
// Your slot content
</div>
</Child>
登录后复制

Child.svelte(默认插槽,svelte 4)

<slot />
登录后复制

在 Svelte 5 中,您需要使用 @render 语法来渲染槽,您也可以从新的 $props() 中获取:

Parent.svelte(默认插槽,svelte 5)


<Child>
<div>
// Your slot content
</div>
</Child>
登录后复制

Child.svelte(默认插槽,svelte 5)

<script>
// destructure children from $props()
const { children } = $props()
</script>
<!-- render default slot here (with optional chaining just in case)-->
{@render children?.()}
登录后复制

命名插槽

命名槽也发生了变化,使用#snippet和@render语法:

Parent.svelte(命名槽,svelte 4)

<Child>
<div slot="mySlot">
// Your slot content
</div>
</Child>
登录后复制

Child.svelte(命名槽,svelte 4)

<slot name="mySlot" />
登录后复制

在 Svelte 5 中,您需要使用 #snippet 传递槽,然后使用 @render 语法来渲染槽,这也是从新的 $props() 中获取的:

Parent.svelte(命名插槽,svelte 5)

<!-- same as svelte 4 -->
<Child>
{#snippet mySlot()}
<div>
// your slot content
</div>
{/snippet}
</Child>
登录后复制

Child.svelte(命名槽,svelte 5)

<script>
// destructure children from $props()
const { mySlot } = $props()
</script>
<!-- render default slot here-->
{@render mySlot()}
登录后复制

附加功能:您还可以根据插槽是否通过 if 块传递来有条件地渲染内容:

Child.svelte(命名槽,svelte 5,条件渲染)

<script>
// destructure children from $props()
const { mySlot } = $props()
</script>
{#if mySlot}
<p>My Slot Section is rendered here</p>
<!-- render default slot here-->
{@render mySlot()}
{/if}
登录后复制

我会继续记录遇到的任何更改。顺便问一下,您觉得 Svelte 5 怎么样?编译时间的增加、构建大小的减少(对于较大的项目)以及额外的功能是否值得增加复杂性?

黑客快乐!

以上是来自 Svelte o Svelte Understanding Slots(默认和命名)的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板