【Svelte】-(4)If 条件判断语句 / Each 循环语句 / Await 异步处理块

简介: 【Svelte】-(4)If 条件判断语句 / Each 循环语句 / Await 异步处理块

If 条件判断语句


HTML 没有表达逻辑的方法,比如条件和循环。在Svelte中了有条件地渲染一些标记,我们将它包装在一个if块中:

{#if isOK}
  <h1>OK</h1>
{/if}


在vue中是 v-if , 在React则是手写javascript就好,我个人比较更喜欢React的coding方式,但为了体验,牺牲点也无所谓🫤。


以下是一个完整的case

<script>
  let newVal = 0
</script>
<div>
  <span>2</span>
  <span>
  {#if 2 > newVal}
      {'>'}
    {:else if 2 < newVal}
      {'<'}
    {:else}
      {'='}
  {/if}
  </span>
  <input bind:value={newVal} />
</div>
<style>
  input {
    width: 20px;
  }
</style>



请注意语句块开始由 # 开头,else : 开头,结束 /

17.png18.png19.png


Each 循环语句


在Svelte中遍历数据列表,需要使用 each 块,遍历的对象需要时数组(类似)对象。


下面来看一个案例:

<script>
  let svelteTutorial = {
    author: 'uiuing',
    nike: '我想养只猫',
    column: {
      name: 'Svelte.js得心应手',
      desc: '这是国内较早较全且经过实践的Svelte.js系列教程。',
      link: 'https://blog.csdn.net/qq_41103843/category_12057717.html'
    },
    blogs: [
      {
        name: '相比Vue和React,Svelte可能更适合你',
        id: 127361869,
        link: 'https://uiuing.blog.csdn.net/article/details/127361869'
      },
      {
        name: '【Svelte】-(1)基础知识 / 快速上手 / 添加数据 / 动态属性 / CSS样式 / 嵌套组件 / HTML标签',
        id: 127365312,
        link: 'https://uiuing.blog.csdn.net/article/details/127365312'
      },
      {
        name: '【Svelte】-(2)reactivity响应式 | 赋值 / reactivity变量 / reactivity代码语句 / reactivity对象',
        id: 127374466,
        link: 'https://uiuing.blog.csdn.net/article/details/127374466'
      },
      {
        name: '【Svelte】-(3)Props 组件传值',
        id: 127392236,
        link: 'https://uiuing.blog.csdn.net/article/details/127392236'
      }
    ],
    updateTime: '2022-10-19'
  }
</script>
<div>
  <h1>作者:{svelteTutorial.author}</h1>
  <h2>昵称:{svelteTutorial.nike}</h2>
  <h3>专栏:{svelteTutorial.column.name}</h3>
  <p>专栏介绍:{svelteTutorial.column.desc}</p>
  <p>专栏链接:{svelteTutorial.column.link}</p>
  <ul>
    {#each svelteTutorial.blogs as blog}
      <li>
        <a href={blog.link}>{blog.name}</a>
      </li>
    {/each}
  </ul>
  <p>更新时间:{svelteTutorial.updateTime}</p>
</div>

效果如下


21.png

获取索引位置

{#each svelteTutorial.blogs as blog, i}
  <li>
    <a href={blog.link}>{i}. {blog.name}</a>
  </li>
{/each}

{#each 遍历对象 as 子项, 索引}


解构使用

{#each svelteTutorial.blogs as {link, name}, i}
  <li>
    <a href={link}>{i}. {name}</a>
  </li>
{/each}

22.png

在此之前我们需要明白,多个 each 块会造成互相干扰,所以我们需要为 each 块指定一个唯一标识符(key),来告诉Svelte如何确定要更改的 DOM 节点


推荐使用字符串或数字当作key,当然是任何对象都可以。


{#each svelteTutorial.blogs as {link, name, id} (id), i}
  <li>
    <a href={link}>{i}. {name}</a>
  </li>
{/each}


例如这里使用的就是 id 作为key


Await 异步处理块


这一块主要就是为了等待异步数据,和在javascript中调用async function是一样的,等待promise值。


注意有两种写法,如果不存在错误可以这样写

<script>
  let userName = 'uiuing'
  async function getUserNikeName(_userName) {
    let users = [
      {userName: 'uiuing', nikeName: '我想养只猫'}
    ]
    let user = users.find(user => user.userName === _userName)
    if (user) {
      return user
    } else {
      throw new Error('用户不存在')
    }
  }
</script>
<div>
  {#await getUserNikeName(userName) then {userName, nikeName}}
    <p>作者: {userName}</p>
    <p>昵称: {nikeName}</p>
  {/await}
</div>


这里你这样写也是一样的。

{#await getUserNikeName(userName) then {userName, nikeName}}
  <p>作者: {user.userName}</p>
  <p>昵称: {user.nikeName}</p>
{/await}

36.png

如果会发生错误且我们需要告诉用户呢?我们就要这样写

<div>
  {#await getUserNikeName(123)}
  {:then {userName, nikeName}}
    <p>作者: {userName}</p>
    <p>昵称: {nikeName}</p>
  {:catch error}
    <p>错误: {error.message}</p>
  {/await}
</div>

63.png

目录
相关文章
|
资源调度 监控 API
开源API网关APISIX分析与使用
开源API网关APISIX分析与使用
1105 0
|
.NET C# 容器
WPF自定义LED风格数字显示控件
原文:WPF自定义LED风格数字显示控件 版权声明:本文为博主原创文章,转载请注明作者和出处 https://blog.csdn.net/ZZZWWWPPP11199988899/article/details/52895167 ...
1897 0
|
4月前
|
Kubernetes 调度 开发者
qwen模型 MindIE PD分离部署问题定位
使用MindIE提供的PD分离特性部署qwen2-7B模型,使用k8s拉起容器,参考这个文档进行部署:https://www.hiascend.com/document/detail/zh/mindie/100/mindieservice/servicedev/mindie_service0060.html,1个Prefill,1个Decode。 最后一步测试推理请求的时候,出现报错:model instance has been finalized or not initialized。
337 1
|
6月前
|
机器学习/深度学习 自然语言处理 算法
AI 世界生存手册(一):从LR到DeepSeek,模型慢慢变大了,也变强了
大家都可以通过写 prompt 来和大模型对话,那大模型之前的算法是怎样的,算法世界经过了哪些比较关键的发展,最后为什么是大模型这条路线走向了 AGI,作者用两篇文章共5.7万字详细探索一下。
AI 世界生存手册(一):从LR到DeepSeek,模型慢慢变大了,也变强了
|
7月前
|
人工智能 小程序 机器人
GDC2025 | DeepSeek-Qwen 模型蒸馏极限挑战赛,来了!(预赛报名)
欢迎您关注由魔搭社区 x SwanLab平台联合举办的 DeepSeek-Qwen 模型蒸馏极限挑战赛!本赛事将作为2025全球开发者先锋大会(GDC)的活动之一,欢迎具备大模型训练/微调实战经验的独立开发者前来挑战!详细报名规则见后文。
279 3
|
机器学习/深度学习 人工智能 算法
Scaling Law触礁数据墙?Epoch AI发文预测LLM到2028年耗尽所有文本数据
【6月更文挑战第23天】Epoch AI警告,大语言模型(LLM)可能在2026-2032年间面临“数据墙”,因人类生成文本数据耗尽。论文探讨LLM扩展限制,提出合成数据、迁移学习和提高数据效率作为应对策略,但也引发数据隐私和伦理问题。研究敦促平衡模型发展与数据资源管理[[1](https://arxiv.org/abs/2211.04325)]。
287 6
|
存储 缓存 关系型数据库
【MySQL调优】如何进行MySQL调优?一篇文章就够了!
MySQL调优主要分为三个步骤:监控报警、排查慢SQL、MySQL调优。 排查慢SQL:开启慢查询日志 、找出最慢的几条SQL、分析查询计划 。 MySQL调优: 基础优化:缓存优化、硬件优化、参数优化、定期清理垃圾、使用合适的存储引擎、读写分离、分库分表; 表设计优化:数据类型优化、冷热数据分表等。 索引优化:考虑索引失效的11个场景、遵循索引设计原则、连接查询优化、排序优化、深分页查询优化、覆盖索引、索引下推、用普通索引等。 SQL优化。
【MySQL调优】如何进行MySQL调优?一篇文章就够了!
|
SQL 存储 缓存
MySQL是如何保证数据不丢失的?
文章详细阐述了InnoDB存储引擎中Buffer Pool与DML操作的关系。在执行插入、更新或删除操作时,InnoDB为了减少磁盘I/O,会在Buffer Pool中缓存数据页进行操作,随后将更新后的“脏页”刷新至磁盘。为防止服务宕机导致数据丢失,InnoDB采用了日志先行(WAL)机制,通过将DML操作记录为Redo Log并异步刷新到磁盘,结合双写机制和合理的日志刷新策略,确保数据的持久性和一致性。尽管如此,仍需合理配置参数以平衡性能与数据安全性。
345 1
MySQL是如何保证数据不丢失的?
|
前端开发 JavaScript 编译器
对比 React,用10个例子快速上手 Svelte
文章用十个例子比较了 React 和 Svelte 两个框架,包括属性传递、状态管理、条件渲染、异步渲染等。通过阅读这篇文章,你可以了解 Svelte 的基本用法和渲染原理。
438 0
对比 React,用10个例子快速上手 Svelte
|
Linux 持续交付 开发工具
版本控制系统的选择:Git vs. Mercurial
【6月更文挑战第20天】Git vs. Mercurial: 两者都是流行的DVCS,Git由Linus Torvalds创建,以其速度和复杂分支管理著称,适合大型项目和有经验的开发者。Mercurial,由Matt Mackall开发,以其简洁命令行和易用性吸引初学者。Git社区更大,扩展更丰富,而Mercurial在某些场景下可能更直观。选择取决于项目需求、团队经验和偏好。

热门文章

最新文章