【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

目录
相关文章
|
9月前
|
存储 弹性计算 安全
阿里云服务器2核8G与4核16G配置选购参考:价格、性能及适用场景
2核8G、4核16G配置是很多个人和企业用户搭建网站和中小型数据库系统等场景时首选的云服务器配置,现在购买2核8G配置最低年付价格只要652.32元/1年,4核16G配置短期租用可以选择月付,现在89元即可购买到经济型e实例4核16G10M带宽配置1个月,年付选择通用算力型u1实例价格为1196.64元/1年起。本文为大家解析阿里云服务器2核8G与4核16G配置的租用费用,热门实例适用场景,以供参考和选择。
|
存储 网络协议 Nacos
高效搭建Nacos:实现微服务的服务注册与配置中心
Nacos(Dynamic Naming and Configuration Service)是阿里巴巴开源的一款动态服务发现、配置管理和服务管理平台。它旨在帮助开发者更轻松地构建、部署和管理分布式系统,特别是在微服务架构中。
2680 82
高效搭建Nacos:实现微服务的服务注册与配置中心
|
消息中间件 缓存 PHP
PHP性能优化:从基础到进阶的实战指南####
本文旨在为开发者提供一份全面的PHP性能优化指南,涵盖从代码层面的基础优化到服务器配置的高级策略。通过具体实例分析,揭示如何有效减少页面加载时间、降低资源消耗,并提升用户体验。无论你是PHP新手还是资深开发者,都能在本文中找到实用的技巧和建议,助你打造更高效、更稳定的Web应用。 ####
|
前端开发 开发者
CSS颜色表示:探索预定义名称、RGB、HEX、HSL、RGBA和HSLA
CSS颜色表示:探索预定义名称、RGB、HEX、HSL、RGBA和HSLA
505 6
|
JavaScript
npm install 报错 import sys; print“%s.%s.%s”% sys.version_info[ :3] ;
npm install 报错 import sys; print“%s.%s.%s”% sys.version_info[ :3] ;
626 3
|
区块链 开发者
libp2p是什么?
libp2p是什么?
623 0
|
SQL 监控 Oracle
PostgreSQL pgcenter - 采样、统计、性能诊断、profile、cli小工具
标签 PostgreSQL , pgcenter , pg_top , awr , perf insight , 等待事件 , perf , profile , 采样 , 统计信息 背景 PostgreSQL 性能诊断的方法很多: 例如: 1、函数的性能诊断,PROFILE。 《PostgreSQL 函数调试、诊断、优化 & auto_explain & plpro
2349 0
|
机器学习/深度学习 自然语言处理
自然语言处理 Paddle NLP - 任务式对话系统-理论
自然语言处理 Paddle NLP - 任务式对话系统-理论
420 0
|
移动开发 JavaScript
h5 实现调用系统拍照或者选择照片并预览
调用手机相机拍照或者是调用手机相册选择照片,这个功能在 手机端页面 或者 webApp 应该是常用到的,就拿个人或会员资料录入那块来说就已经是经常会碰到的, 每当看到这块功能的时候,前端的小伙伴就得去找各种各样的插件。
3520 0