svelte的一些基础demo
脚手架
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>
												
											svelte的一些基础demo的更多相关文章
- Qwt开发笔记(一):Qwt简介、下载以及基础demo工程模板
		
前言 QWT开发笔记系列整理集合,这是目前使用最为广泛的Qt图表类(Qt的QWidget代码方向只有QtCharts,Qwt,QCustomPlot),使用多年,系统性的整理,本系列旨在系统解说并 ...
 - node-webkit 环境搭建与基础demo
		
首先去github上面下载(地址),具体更具自己的系统,我的是windows,这里只给出windows的做法 下载windows x64版本 下载之后解压,得到以下东西 为了方便,我们直接在这个目录中 ...
 - [spring security] spring security 4 基础Demo
		
依赖包: <properties> <junit.version>4.11</junit.version> <spring.version>4.1.6. ...
 - iOS开发-UI基础Demo
		
现在更多的学习资料都是xCode4.X的,发现xCode6.1还是很多东西,如果有正在学习iOS开发的可以通过Demo简单了解下iOS的UI开发~ 1.新建单视图文件: 2.新建项目名称,语言选择OC ...
 - ios socket(基础demo)
		
http://blog.sina.com.cn/s/blog_7a2f0a830101ecv4.html clinetSocket 1.viewcontroller.h @interface View ...
 - [jquery] jQuery jsTree V3.2.1 基础Demo
		
引入对应的文件: <link rel="stylesheet" href="../dist/themes/default/style.min.css" / ...
 - Sencha 基础Demo测试,三种showView的方法
		
直接贴代码吧 Ext.define("build.controller.MainController",{ extend:"Ext.app.Controller" ...
 - webpack学习(二):先写几个webpack基础demo
		
一.先写一个简单demo1 1-1安装好webpack后创建这样一个目录: 1-2:向src各文件和dist/index.html文件写入内容: <!DOCTYPE html> <h ...
 - java多线程 基础demo
		
join() 让主进程等待子进程全部执行完 例子如下: package mocker; public class TestThread5 extends Thread { priva ...
 - Groovy语言学习--语法基础(4)
		
语法基础到此就结束了,毕竟其和Java许多地方并无差别.groovy作为脚本,是为了能更好地随业务变化调整规则,我根据自己对规则的理解 通过一张图简单描述一个groovy脚本场景:由于货币膨胀,经济收 ...
 
随机推荐
- [python] 在ubuntu中, 如何运行指定位置的py程序
			
首先打开终端 Ctrl + Alt + T 运行py程序 进入py文件所在目录 (例如: cd 桌面) 运行py程序: python a.py
 - JNI动态注册以及JNI签名
			
一.动态注册和静态注册 注册native方法有两种方式,动态注册和静态注册.静态注册是在编译时进行注册,而且在java中声明的native方法和c/c++中的本地方法的对应关系是恒定的:比如说在com ...
 - Jmeter调用Python脚本,实现参数互相传递
			
首先传值到python 1:新增取样器--->os进程取样器 2:新建.bat文件 (写python脚本的路径和传参的个数:思路是:jmeter调用shell,用shell执行py) F:cd ...
 - Webpack DevServer 代理本地静态目录
			
前言 项目里需要离线切片地图,但切片地图文件很多,需求上有时无法单独提供一个独立的文件服务器或者切片服务器,放在 public 难免会在调试运行时被复制到 DevServer 上,而这个操作在低层级少 ...
 - Iksevi 题解
			
Iksevi 题目大意 \(n\) 次询问,每次给定一个点 \((x,y),x\ge 0, y\ge 0\),问有多少种对角线长为偶数的正方形使得在用该正方形正密铺第一象限的情况下该点位于正方形顶点上 ...
 - Rustlings通关记录与题解
			
2023年6月19日决定对rust做一个重新的梳理,整理今年4月份做完的rustlings,根据自己的理解来写一份题解,记录在此. 周折很久,因为中途经历了推免的各种麻烦事,以及选择数据库作为未来研究 ...
 - js数据结构--栈
			
<!DOCTYPE html> <html> <head> <title></title> </head> <body&g ...
 - dfs 序 O(nlogn)-O(1) 求 LCA
			
学点分树,发现不会询问复杂度 \(O(1)\) 的 LCA.于是被迫递归式学习. 我们设 \(dfn_i\) 表示点 \(i\) 在 dfs 过程中第几个被访问到,把点按访问到的顺序排序得到的序列叫 ...
 - moment日期处理类库
			
Moment 被设计为在浏览器和 Node.js 中都能工作. 安装 npm install moment --save # npm yarn add moment # Yarn 使用 /** * F ...
 - vue本地能够访问图片,打包项目之后图片无法访问
			
//template中 <img :src="boxHerf" /> //js let boxHerf = ref('/src/assets/images/contai ...