首页 > 其他分享 >svelte的一些基础demo

svelte的一些基础demo

时间:2023-12-28 20:46:37浏览次数:29  
标签:count function name ... demo 基础 let svelte

脚手架

Vite:vite是集成了svelte,初始化的时候选择svelte就行了。

npm init vite

SvelteKit:底层基于vite的更上层框架,类似于nextjs。

npm create svelte@latest my-app
cd my-app
npm install
npm run dev

.svelte文件结构

和vue类似svelte文件是.svelte结尾的文件,比如demo.svelte。代码结构:

<script>
  let name = 'hello world';
</script>

<div class="name">
  {name}
</div>

<style>
.name {
  color: red;
}
</style>

模版绑定

绑定变量

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

<h1>Hello {name}!</h1>

绑定属性

<script>
  let src = '/tutorial/image.gif';
  let name = '张三';
</script>

<img {src} alt="{name} dances.">

绑定事件

<script>
  let count = 0;

  function incrementCount() {
    count += 1;
  }
</script>

<button on:click={incrementCount}>
  Clicked {count} {count === 1 ? 'time' : 'times'}
</button>

$:类似于vue的computed。例如:

<script>
  let count = 0;
    // 定义一个名字叫doubled的变量,当count的值改变时,doubled会改变。doubled变量时响应式的。
  $: doubled = count * 2;
    // 直接这样写d2不是响应式的。
  let d2 = count * 2;

    $: if (count >= 10) {
        alert('count is dangerously high!');
        count = 9;
    }

    $: {
        console.log('the count is ' + count);
        alert('I SAID THE COUNT IS ' + count);
    }

  function handleClick() {
    count += 1;
  }
</script>

<button on:click={handleClick}>
  Clicked {count} {count === 1 ? 'time' : 'times'}
</button>

<p>{count} doubled is {doubled}</p>
<p>
  t2 is {d2}
</p>

为什么d2变量不是响应式的,我们会在 svelte响应式原理里面解释。
if/else

	  <script>
	  	let user = { loggedIn: false };

	  	function toggle() {
	  		user.loggedIn = !user.loggedIn;
	  	}
	  </script>

	  <div>
	    {#if user.loggedIn}
	        <button on:click={toggle}>
	            Log out
	        </button>
	    {:else}
	        <button on:click={toggle}>
	            Log in
	        </button>
	    {/if}
	  </div>

each遍历

<script>
  let cats = [
    { id: 'J---aiyznGQ', name: 'Keyboard Cat' },
    { id: 'z_AbfPXTKms', name: 'Maru' },
    { id: 'OUtn3pvWmpg', name: 'Henri The Existential Cat' }
  ];
</script>

<h1>The Famous Cats of YouTube</h1>

<ul>
  {#each cats as { id, name }, i}
    <li><a target="_blank" href="https://www.youtube.com/watch?v={id}" rel="noreferrer">
      {i + 1}: {name}
    </a></li>
  {/each}
</ul>

await

<script>
  async function getRandomNumber() {
    const res = await fetch(`/tutorial/random-number`);
    const text = await res.text();

    if (res.ok) {
      return {val: text};
    } else {
      throw new Error(text);
    }
  }

  let promise = getRandomNumber();

  function handleClick() {
    promise = getRandomNumber();
  }
</script>

<button on:click={handleClick}>
  generate random number
</button>

{#await promise}
  <p>...waiting</p>
{:then res}
  <p>The number is {res.val}</p>
{:catch error}
  <p style="color: red">{error.message}</p>
{/await}

双向数据流

<script>
  let name = 'world';
    $:
</script>

<input bind:value={name}>

<h1>Hello {name}!</h1>

组件

使用子组件和父子组件通信
App.svelte

<script lang="ts">
  import Child from './child.svelte';

  var num = 1;
    var obj = {
      count: 1
    }

  function handleAdd() {
    num = num + 1;
        obj.count = obj.count + 1;
  }

    function handleReset(event) {
    num = event.detail.val;
    obj.count = event.detail.val;
  }
</script>

<div>
  我是父组件
  <button on:click={handleAdd}>add num</button>
    // 也支持...的语法
  <Child count={num} on:reset={handleReset} />
    <Child {...obj} on:reset={handleReset} />
</div>

Child.svelte

<script>
  import { createEventDispatcher } from 'svelte';
  export let count;

  const dispatch = createEventDispatcher();

  function handleReset() {
    dispatch('reset', {
      val: 0
    });
  }
</script>

<div>
  <p>我是子组件,count is {count}</p>
  <button on:click={handleReset}>reset count</button>
</div>

组件中使用双向数据流
App.svelte

<script>
  import Child from './child.svelte';

  var name;
</script>

<p>
  name is {name}
</p>
<Child bind:name />

Child.svelte

<script>
  export let name;
</script>

<div>
  <input bind:value={name} />
</div>

插槽
App.svelte

<script>
  import Child from './child.svelte';
</script>

<Child>
  <p>i am from App</p>
  <p slot="tool">i am tool</p>
</Child>

Child.svelte

<div>
  <slot />
  <slot name="tool" />
</div>

生命周期

onMount、onDestroy、beforeUpdate、afterUpdate

<script>
  import { onMount, onDestroy, beforeUpdate, afterUpdate } from 'svelte';

  onMount(() => {
    //...
  });

  onDestroy(() => {
    //...
  });

    beforeUpdate(() => {
    //...
  });

    afterUpdate(() => {
    //...
  });
</script>

<h1>Photo album</h1>

标签:count,function,name,...,demo,基础,let,svelte
From: https://www.cnblogs.com/heavenYJJ/p/17933537.html

相关文章

  • 2023-2024-1 20231329 《计算机基础与程序设计》第14周学习总结
    作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP这个作业要求在哪里2022-2023-1计算机基础与程序设计第14周作业(https://www.cnblogs.com/rocedu/p/9577842.html)这个作业的目标《C语言程......
  • svelte响应式原理
    svelte文件编译为js后的结构源代码:<scriptlang="ts">letfirstName='张'letlastName='三'letage=18functionhandleChangeName(){firstName='王'lastName='二'}fu......
  • JAVA基础+安装
    Java特性高效可跨平台不占内存不需要指针Java三大版本Writeonce,runanywhere.JavaSE:标准版(桌面程序,控制台开发……)JavaME:嵌入式开发(手机,小家电……)JavaEE:E企业级开发(web端,服务器开发)JDK、JRE、JVMJDK:JavaDevelopmentKitJava开发者工具JRE:JavaRuntimeEnvi......
  • 2023-2024 20231313《计算机基础与程序设计》第十四周学习总结
    2023-202420231313《计算机基础与程序设计》第十四周学习总结作业速达作业课程班级链接作业要求计算机基础与程序设计第十四周学习总结作业内容《C语言程序设计》第13章并完成云班课测试作业正文我的作业目录教材总结总结学习过程中的问题《C语言程......
  • 关于 K8s 的一些基础概念整理
    〇、前言Kubernetes,将中间八个字母用数字8替换掉简称k8s,是一个开源的容器集群管理系统,由谷歌开发并维护。它为跨主机的容器化应用提供资源调度、服务发现、高可用管理和弹性伸缩等功能。下面简单列一下k8s的几个特性:自动化部署:Kubernetes可以根据应用程序计算资源需求自......
  • iMessage群发,iMessage群发基础知识,iMessage群发源代码分享
    在当今的数字化时代,即时通讯已经成为我们日常生活和工作中不可或缺的一部分,其中,苹果的iMessage服务因其出色的用户体验和无缝的设备间同步而备受用户喜爱。然而,你是否想过如何利用iMessage进行群发操作呢?本文将带你深入了解iMessage群发的原理,并分享一些基础的源代码。首先,我们......
  • 快乐学Python,Python基础之如何控制代码执行顺序?【分支结构和循环结构】
    在上一篇文章中,我们所操作的所有代码都是顺序执行的。什么意思呢?就是我们在所有例子中的代码,计算机都是从第一句开始执行,执行完毕后执行第二句,以此类推,最终执行完整个代码块。以下面代码为例:print("FirstLine!")print("SecondLine!")print("ThirdLine!")输出结果:First......
  • CSS基础
    【CSS简介、基础选择器、字体属性、文本属性、引入方式】本文档是个人对Pink老师课程的总结归纳及补充,转载请注明出处!一、CSS简介CSS的主要使用场景就是布局网页,美化页面的。1.1HTML的局限性HTML只关注内容的语义,虽然HTML可以做简单的样式,但是带来的是无尽的臃肿、......
  • HTML基础
    【HTML基础】本文档是个人对Pink老师课程的总结归纳及补充,转载请注明出处!一、HTML简介1.1网页1.1.1什么是网页?**网页:**构成网站的基本元素,通常是HTML格式的文件(.htm或.html)必须通过浏览器来阅读。**网站:**利用前端技术制作的网页集合。1.1.2什么是HTML?**超文......
  • JavaWeb - Day13 - 事务管理、AOP(基础、进阶、案例)
    01.事务管理-事务回顾-spring事务管理1.1事务回顾在数据库阶段我们已学习过事务了,我们讲到:事务是一组操作的集合,它是一个不可分割的工作单位。事务会把所有的操作作为一个整体,一起向数据库提交或者是撤销操作请求。所以这组操作要么同时成功,要么同时失败。怎么样来控制这组......