【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

目录
相关文章
|
8月前
|
C++
C++ 条件与 If 语句:掌握逻辑判断与流程控制精髓
C++ 中的条件语句用于根据布尔表达式的真假执行不同代码。`if` 用于当条件为真时执行一段代码,`else` 配合 `if` 在条件不成立时执行另一段代码。`else if` 允许测试额外的条件。`switch` 语句提供多分支选择。还有三元运算符 `(condition) ? expressionTrue : expressionFalse`,它是一种简写的 if...else 形式,常用于一行内作出决定。
105 0
|
3月前
|
Java C#
如何避免在C#循环中使用await
如何避免在C#循环中使用await
144 9
|
5月前
|
JavaScript 前端开发
JavaScript基础&实战(3)js中的流程控制语句、条件分支语句、for循环、while循环
这篇文章讲解了JavaScript中的流程控制语句,包括基本的if条件判断、弹窗提示输入、switch条件分支语句、while和do...while循环以及for循环的使用和示例。
JavaScript基础&实战(3)js中的流程控制语句、条件分支语句、for循环、while循环
|
8月前
|
JavaScript 前端开发
JavaScript 条件循环语句(for 循环)
JavaScript 条件循环语句(for 循环)
|
8月前
|
JavaScript 前端开发
变量提升:JavaScript代码是按顺序执行的吗?
变量提升:JavaScript代码是按顺序执行的吗?
48 0
|
JSON 前端开发 JavaScript
async await异步,ejs基础使用,三目运算符
async await异步,ejs基础使用,三目运算符
|
Web App开发 前端开发 JavaScript
关于 Await、Promise 执行顺序差异问题
关于 Await、Promise 执行顺序差异问题
307 0
关于 Await、Promise 执行顺序差异问题
|
前端开发 JavaScript
web前端-JavaScript流程控制语句(条件判断,条件分支和循环语句)
web前端-JavaScript流程控制语句(条件判断,条件分支和循环语句)
165 0
|
JavaScript 前端开发 C++
你觉得“惰性求值”在 JS 中会怎么实现?
JS 不像 Haskell,其自身从语言设计层面不支持惰性求值,但是可以通过语法去 模拟实现 这一特性; 想一想,我们可以用什么来 JS 语法来模拟这一“延迟计算”的特性?
|
JavaScript 前端开发
JavaScript的流程控制之for循环语句和while循环语句(二)
JavaScript的流程控制(二) 上一篇博客说到了JavaScript流程控制的if条件语句和switch选择语句,现在我们来说一下JavaScript流程控制中的循环语句。JavaScript中循环语句主要包含for循环和while循环两类。 for循环 for循环又分为for循环,for…in循环,for…of循环,其中for…of循环是es6中新增的,咱们后面讲es6时再讲,这次主要讲for循环和for…in循环。 1.for循环 循环可以将代码块执行指定的次数。 // 语法: // for(语句1;语句2;语句3){ // 语句4; /

热门文章

最新文章