【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

目录
相关文章
|
7月前
|
C++
C++ 条件与 If 语句:掌握逻辑判断与流程控制精髓
C++ 中的条件语句用于根据布尔表达式的真假执行不同代码。`if` 用于当条件为真时执行一段代码,`else` 配合 `if` 在条件不成立时执行另一段代码。`else if` 允许测试额外的条件。`switch` 语句提供多分支选择。还有三元运算符 `(condition) ? expressionTrue : expressionFalse`,它是一种简写的 if...else 形式,常用于一行内作出决定。
99 0
|
7月前
|
Java
Java的控制流程语句:深入理解条件语句、循环语句与跳转语句
Java的控制流程语句:深入理解条件语句、循环语句与跳转语句
74 1
|
2月前
|
Java C#
如何避免在C#循环中使用await
如何避免在C#循环中使用await
125 9
|
4月前
|
JavaScript 前端开发
JavaScript基础&实战(3)js中的流程控制语句、条件分支语句、for循环、while循环
这篇文章讲解了JavaScript中的流程控制语句,包括基本的if条件判断、弹窗提示输入、switch条件分支语句、while和do...while循环以及for循环的使用和示例。
JavaScript基础&实战(3)js中的流程控制语句、条件分支语句、for循环、while循环
|
7月前
|
JavaScript 前端开发
JavaScript 条件循环语句(for 循环)
JavaScript 条件循环语句(for 循环)
|
Apache
hooks为什么不能在条件语句中使用,如果修改源码,怎么能让它支持条件语句?
hooks为什么不能在条件语句中使用,如果修改源码,怎么能让它支持条件语句?
95 1
js-选择结构与判断分支结构
js-选择结构与判断分支结构
|
前端开发 JavaScript
web前端-JavaScript流程控制语句(条件判断,条件分支和循环语句)
web前端-JavaScript流程控制语句(条件判断,条件分支和循环语句)
161 0
|
存储 JavaScript 前端开发
JavaScript 流程控制 - 分支和循环(四)
文章目录 JavaScript 流程控制 - 分支和循环 1. 什么是流程控制 2. 顺序流程控制 3. 分支流程控制 之 if语句 3.1 什么是分支结构 3.2 if 语句 3.2.1 if 语句基本理解 3.2.2 if 语句执行流程 3.2.3 if 语句案例 3.3 if else语句(双分支语句) 3.3.1 引言 3.3.2 if else 语法基本理解 3.3.3 判断闰年案例
137 0
JavaScript 流程控制 - 分支和循环(四)
|
小程序 编译器
JavaScript02 分支语句/循环
while循环、数据类型转换、语句表达式、if循环、switch选择与语句的使用