找回密码
立即注册
搜索
发回帖 发新帖

5124

积分

0

好友

650

主题
发表于 3 小时前 | 查看: 5| 回复: 0

Svelte 的模板语法非常精简:变量用一对花括号插值,条件和列表都有独立语句块,异步操作也有专门的 Await 块。下面按使用顺序梳理核心写法。

变量插值

在 Svelte 中渲染变量,使用大括号 {} 插值。

Svelte 变量插值基础示例

<script>
  let name = 'Tony';
</script>

<div>{name}</div>

if / else 条件渲染

要在模板中渲染条件语句,使用 {#if} 语句块,它的语法如下:

Svelte if 条件块语法示例

{#if condition}
  <div>...</div>
{/if}

举个例子:

Svelte if 条件渲染代码示例

<script>
  let world = $state({
    mountainHasEdges: true,
    riverIsFlowing: true,
  });
</script>

{#if world.mountainHasEdges && world.riverIsFlowing}
  <div>我不能和你分手</div>
{/if}

有 if 的地方通常也离不开 else,这俩就像卧龙凤雏,经常成对出现。{:else} 块的语法如下:

Svelte if-else 语句块语法示例

{#if condition}
  <div>...</div>
{:else}
  <div>...</div>
{/if}

举例如下:

Svelte if-else 条件渲染示例

<script>
  let world = $state({
    mountainHasEdges: true,
    riverIsFlowing: true,
  });
</script>

{#if world.mountainHasEdges && world.riverIsFlowing}
  <div>我不能和你分手</div>
{:else}
  <div>我还是不能和你分手</div>
{/if}

语句块的三种形式

在 Svelte 语句块中,有三种类型:{#...} 开启语句块,{/...} 结束语句块,{:...} 继续当前语句块。正如上方的 {#if}、{:else}、{/if} 所示。

如果条件较多,可以使用 {:else if} 语句块。

Svelte else if 多条件渲染示例

<script>
  let world = $state({
    mountainHasEdges: true,
    riverIsFlowing: true,
  });
</script>

{#if world.mountainHasEdges && world.riverIsFlowing}
  <div>我不能和你分手</div>
{:else if world.mountainHasEdges}
  <div>我还是不能和你分手</div>
{:else}
  <div>剧终</div>
{/if}

each 列表渲染

如果要渲染列表,使用 {#each} 语句块。语法如下:

Svelte each 列表渲染语法示例

{#each list as item}
  <div>... {item} ...</div>
{/each}

比如:

Svelte each 遍历数组基础示例

<script>
  let cats = $state([
    '陈俊南',
    '乔家劲',
    '张丽娟',
    '李尚武',
    '钱多多',
    '周末',
  ]);
</script>

<h1>猫组织成员</h1>
{#each cats as cat}
  <div>{cat}</div>
{/each}

如果想访问元素在列表中的位置索引,在 as 后面使用第二个参数:

Svelte each 索引参数使用示例

{#each cats as cat, i}
  <div>{i + 1}: {cat}</div>
{/each}

列表的 key

在 React 和 Vue 渲染列表时,为了正确识别每个元素,需要强制为每一个元素提供唯一的 key 值。如果不给,编译器会通过警告骚扰你。

Svelte 的 key 默认不是强制的。当你改变列表长度时,它会在列表尾部增加或删除元素,并原地修改已有元素的值。

如果列表纯展示用、无状态,这就够了,不需要 key。

什么时候才需要 key?当列表元素有内部状态,或者需要排序时,就需要通过 key 唯一标识每一个元素。

Svelte 在 as 后面用小括号 () 标识唯一键的取值。下面示例主要展示语法,实际使用时请确保 key 取值唯一。

Svelte key 唯一键标识示例

<script>
  let cats = $state([
    { id: 1, name: '陈俊南' },
    { id: 1, name: '乔家劲' },
    { id: 1, name: '张丽娟' },
    { id: 1, name: '李尚武' },
    { id: 1, name: '钱多多' },
    { id: 1, name: '周末' },
  ]);
</script>

<h1>猫组织成员</h1>
{#each cats as cat (cat.id)} <!-- 键取自 id -->
  <div>{cat.id}: {cat.name}</div>
{/each}

Await 异步块

Svelte 还有一种专门处理异步操作 Await 块。它的参数是 promise 实例,可以根据 promise 的状态,渲染不同的界面。

Await 块的语法如下:

Svelte Await 异步块语法示例

{#await promise}
  <p>此处渲染 pending 状态</p>
{:then value}
  <p>此处渲染 resolved 状态,value 是获取的值</p>
{:catch error}
  <p>此处渲染 rejected 状态,错误信息在 error 中</p>
{/await}

以上就是 Svelte 模板渲染中常见语句块的用法。更多前端开发经验与资源共享,欢迎到 云栈社区 交流。




上一篇:AI 文章转解说视频工具免费版,零成本做知识科普短视频
下一篇:GhostTrack 真能手机号定位吗?OSINT 工具的能力与边界
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-10-19 18:35 , Processed in 0.075515 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表